Browse Source

add poi's website and phone number, doesn't crash when there is no `displayMapRegion`, query the token on the first request

ta 2 years ago
parent
commit
525946d7dd
1 changed files with 35 additions and 11 deletions
  1. 35 11
      searx/engines/apple_maps.py

+ 35 - 11
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'),
                 },
             }
         )