From 525946d7dd89c4a8470d2bdcd5e68642c43fe2bb Mon Sep 17 00:00:00 2001 From: ta Date: Sat, 27 Aug 2022 06:17:58 +0700 Subject: [PATCH] add poi's website and phone number, doesn't crash when there is no `displayMapRegion`, query the token on the first request --- searx/engines/apple_maps.py | 46 ++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/searx/engines/apple_maps.py b/searx/engines/apple_maps.py index 08dd15ac6..eb4af422e 100644 --- a/searx/engines/apple_maps.py +++ b/searx/engines/apple_maps.py @@ -7,6 +7,7 @@ from time import time from urllib.parse import urlencode from searx.network import get as http_get +from searx.engines.openstreetmap import get_key_label about = { "website": 'https://www.apple.com/maps/', @@ -43,10 +44,6 @@ def obtain_token(): return token -def init(_engine_settings=None): - obtain_token() - - def request(query, params): if time() - (token['last_updated'] or 0) > 1800: obtain_token() @@ -63,25 +60,52 @@ def response(resp): resp_json = loads(resp.text) + user_language = resp.search_params['language'] + for result in resp_json['results']: - box = result['displayMapRegion'] + boundingbox = None + if 'displayMapRegion' in result: + box = result['displayMapRegion'] + boundingbox = [box['southLat'], box['northLat'], box['westLng'], box['eastLng']] + + links = [] + if 'telephone' in result: + telephone = result['telephone'] + links.append( + { + 'label': get_key_label('phone', user_language), + 'url': 'tel:' + telephone, + 'url_label': telephone, + } + ) + if result.get('urls'): + url = result['urls'][0] + links.append( + { + 'label': get_key_label('website', user_language), + 'url': url, + 'url_label': url, + } + ) results.append( { 'template': 'map.html', + 'type': result.get('poiCategory'), 'title': result['name'], + 'links': links, 'latitude': result['center']['lat'], 'longitude': result['center']['lng'], 'url': result['placecardUrl'], - 'boundingbox': [box['southLat'], box['northLat'], box['westLng'], box['eastLng']], + 'boundingbox': boundingbox, 'geojson': {'type': 'Point', 'coordinates': [result['center']['lng'], result['center']['lat']]}, 'address': { 'name': result['name'], - 'house_number': result.get('subThoroughfare', {}), - 'road': result.get('thoroughfare', {}), - 'locality': result.get('locality', {}), - 'postcode': result.get('postCode', {}), - 'country': result.get('country', {}), + 'house_number': result.get('subThoroughfare'), + 'road': result.get('thoroughfare'), + 'locality': result.get('locality'), + 'postcode': result.get('postCode'), + 'country': result.get('country'), }, } )