fix osm parsing
This commit is contained in:
SDE
2023-07-21 00:32:19 +03:00
parent 57c6badfa9
commit 2b42aa1173
2 changed files with 33 additions and 15 deletions

View File

@@ -12,8 +12,8 @@ from django.conf import settings
def MainPage(request): def MainPage(request):
from ReferenceDataApp.funcs import parse_data, search_cities_in_db, search_airports_in_db from ReferenceDataApp.funcs import parse_data, search_cities_in_db, search_airports_in_db
# res = search_cities_in_db('ms') res = search_airports_in_db('ang')
# res = parse_data() res = parse_data()
page = StaticPage.objects.get(url='main') page = StaticPage.objects.get(url='main')

View File

@@ -9,7 +9,7 @@ def search_cities_in_db(search_str):
Q_obj = Q(name_en__icontains=search_str) | Q(name_ru__icontains=search_str) | \ Q_obj = Q(name_en__icontains=search_str) | Q(name_ru__icontains=search_str) | \
Q(country__name_en__icontains=search_str) | Q(country__name_ru__icontains=search_str) Q(country__name_en__icontains=search_str) | Q(country__name_ru__icontains=search_str)
res_data = City.objects.filter(Q_obj).values('id', 'name', 'country__name') res_data = City.objects.filter(Q_obj).values('id', 'name', 'country__name')
return res_data return list(res_data)
def search_airports_in_db(search_str): def search_airports_in_db(search_str):
Q_obj = Q(iata_code__icontains=search_str) | \ Q_obj = Q(iata_code__icontains=search_str) | \
@@ -18,7 +18,7 @@ def search_airports_in_db(search_str):
Q(city__country__name_en__icontains=search_str) | \ Q(city__country__name_en__icontains=search_str) | \
Q(city__country__name_ru__icontains=search_str) Q(city__country__name_ru__icontains=search_str)
res_data = Airport.objects.filter(Q_obj).values('id', 'name', 'iata_code', 'city__name', 'city__country__name') res_data = Airport.objects.filter(Q_obj).values('id', 'name', 'iata_code', 'city__name', 'city__country__name')
return res_data return list(res_data)
def get_country_area_id_by_countryName(class_obj, name): def get_country_area_id_by_countryName(class_obj, name):
@@ -61,8 +61,8 @@ def create_airports_by_airportsList(airportsList, city=None):
airport_kwargs = { airport_kwargs = {
'city': city, 'city': city,
'name_ru': airport_Dict['name:ru'], # 'name_ru': airport_Dict['name:ru'],
'name_en': airport_Dict['name:en'], # 'name_en': airport_Dict['name:en'],
'geo_lat': str(airport_Dict['@lat']), 'geo_lat': str(airport_Dict['@lat']),
'geo_lon': str(airport_Dict['@lon']), 'geo_lon': str(airport_Dict['@lon']),
@@ -73,6 +73,12 @@ def create_airports_by_airportsList(airportsList, city=None):
'icao_code': airport_Dict['icao'], 'icao_code': airport_Dict['icao'],
} }
if airport_Dict['name:ru']:
airport_kwargs.update({'name_ru': airport_Dict['name:ru']})
if airport_Dict['name:en']:
airport_kwargs.update({'name_en': airport_Dict['name:en']})
if 'area_id' in airport_Dict: if 'area_id' in airport_Dict:
airport_kwargs.update({'area_id': airport_Dict['area_id']}) airport_kwargs.update({'area_id': airport_Dict['area_id']})
@@ -86,6 +92,7 @@ def create_airports_by_airportsList(airportsList, city=None):
def parse_data(): def parse_data():
# Airport.objects.all().delete()
# Country.objects.all().delete() # Country.objects.all().delete()
from BaseModels.OpenStreetMap.osm_api import osm_get_countries, osm_get_country_w_cities_n_airports from BaseModels.OpenStreetMap.osm_api import osm_get_countries, osm_get_country_w_cities_n_airports
@@ -132,8 +139,8 @@ def parse_data():
if not country: if not country:
country_kwargs = { country_kwargs = {
'name_ru': country_Dict['name:ru'], # 'name_ru': country_Dict['name:ru'],
'name_en': country_Dict['name:en'], # 'name_en': country_Dict['name:en'],
'international_name': country_Dict['int_name'], 'international_name': country_Dict['int_name'],
'official_name': country_Dict['official_name'], 'official_name': country_Dict['official_name'],
@@ -146,6 +153,13 @@ def parse_data():
'geo_lat': str(country_Dict['@lat']), 'geo_lat': str(country_Dict['@lat']),
'geo_lon': str(country_Dict['@lon']), 'geo_lon': str(country_Dict['@lon']),
} }
if country_Dict['name:ru']:
country_kwargs.update({'name_ru': country_Dict['name:ru']})
if country_Dict['name:en']:
country_kwargs.update({'name_en': country_Dict['name:en']})
if 'area_id' in country_Dict: if 'area_id' in country_Dict:
country_kwargs.update({'area_id': country_Dict['area_id']}) country_kwargs.update({'area_id': country_Dict['area_id']})
@@ -155,12 +169,14 @@ def parse_data():
for city_Dict in country_Dict['cities']: for city_Dict in country_Dict['cities']:
city = None city = None
kwargs = {}
if city_Dict['name:en']:
kwargs.update({'name_en': city_Dict['name:en']})
elif city_Dict['name:ru']:
kwargs.update({'name_ru': city_Dict['name:ru']})
try: try:
kwargs = {}
if country_Dict['name:en']:
kwargs.update({'name_en': country_Dict['name:en']})
elif country_Dict['name:ru']:
kwargs.update({'name_ru': country_Dict['name:ru']})
city = City.objects.get(**kwargs) city = City.objects.get(**kwargs)
except Exception as e: except Exception as e:
print(f'error = {str(e)}') print(f'error = {str(e)}')
@@ -170,13 +186,15 @@ def parse_data():
city_kwargs = { city_kwargs = {
'country': country, 'country': country,
'name_ru': city_Dict['name:ru'], # 'name_ru': city_Dict['name:ru'],
'name_en': city_Dict['name:en'], # 'name_en': city_Dict['name:en'],
'geo_lat': str(city_Dict['@lat']), 'geo_lat': str(city_Dict['@lat']),
'geo_lon': str(city_Dict['@lon']), 'geo_lon': str(city_Dict['@lon']),
} }
city_kwargs.update(kwargs)
if 'area_id' in city_Dict: if 'area_id' in city_Dict:
city_kwargs.update({'area_id': city_Dict['area_id']}) city_kwargs.update({'area_id': city_Dict['area_id']})