2023-06-04 21:43:27 +05:00
|
|
|
from pydantic import BaseModel, Field
|
2023-06-04 21:10:09 +05:00
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RegionNames(BaseModel):
|
2023-06-04 21:43:27 +05:00
|
|
|
full_name: str = Field(alias='fullName')
|
|
|
|
|
short_name: str = Field(alias='shortName')
|
|
|
|
|
display_name: str = Field(alias='displayName')
|
|
|
|
|
primary_display_name: str = Field(alias='primaryDisplayName')
|
|
|
|
|
secondary_display_name: str = Field(alias='secondaryDisplayName')
|
|
|
|
|
last_search_name: str = Field(alias='lastSearchName')
|
2023-06-04 21:10:09 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class EssId(BaseModel):
|
2023-06-04 21:43:27 +05:00
|
|
|
source_name: str = Field(alias='sourceName')
|
|
|
|
|
source_id: int = Field(alias='sourceId')
|
2023-06-04 21:10:09 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Country(BaseModel):
|
|
|
|
|
name: str
|
2023-06-04 21:43:27 +05:00
|
|
|
iso_code2: str = Field(alias='isoCode2')
|
|
|
|
|
iso_code3: str = Field(alias='isoCode3')
|
2023-06-04 21:10:09 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class HierarchyInfo(BaseModel):
|
|
|
|
|
country: Country
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Coordinates(BaseModel):
|
2023-06-04 21:43:27 +05:00
|
|
|
latitude: float = Field(alias='lat')
|
|
|
|
|
longitude: float = Field(alias='long')
|
2023-06-04 21:10:09 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class GaiaRegionResult(BaseModel):
|
|
|
|
|
index: int
|
2023-06-04 21:43:27 +05:00
|
|
|
gaia_id: int = Field(alias='gaiaId')
|
2023-06-04 21:10:09 +05:00
|
|
|
type: str
|
2023-06-04 21:43:27 +05:00
|
|
|
region_names: RegionNames = Field(alias='regionNames')
|
|
|
|
|
ess_id: EssId = Field(alias='essId')
|
2023-06-04 21:10:09 +05:00
|
|
|
coordinates: Coordinates
|
2023-06-04 21:43:27 +05:00
|
|
|
hierarchy_info: HierarchyInfo = Field(alias='hierarchyInfo')
|
2023-06-04 21:10:09 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class SearchResults(BaseModel):
|
2023-06-04 21:43:27 +05:00
|
|
|
query: str = Field(alias='q')
|
|
|
|
|
request_id: str = Field(alias='rid')
|
|
|
|
|
request_status: str = Field(alias='rc')
|
|
|
|
|
search_results: list[GaiaRegionResult] = Field(alias='sr')
|
2023-06-04 21:10:09 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
with open('locations_v3_search_example.json', 'r', encoding='utf-8') as json_file:
|
|
|
|
|
data = json.load(json_file)
|
|
|
|
|
results = SearchResults(**data)
|
|
|
|
|
print('\n'.join(
|
2023-06-04 21:43:27 +05:00
|
|
|
[result.region_names.full_name for result in results.search_results if result.type in ('CITY', 'NEIGHBORHOOD')])
|
2023-06-04 21:10:09 +05:00
|
|
|
)
|