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

This commit is contained in:
ta 2022-08-27 06:17:58 +07:00
parent 5dce299b22
commit 525946d7dd

View file

@ -7,6 +7,7 @@ from time import time
from urllib.parse import urlencode from urllib.parse import urlencode
from searx.network import get as http_get from searx.network import get as http_get
from searx.engines.openstreetmap import get_key_label
about = { about = {
"website": 'https://www.apple.com/maps/', "website": 'https://www.apple.com/maps/',
@ -43,10 +44,6 @@ def obtain_token():
return token return token
def init(_engine_settings=None):
obtain_token()
def request(query, params): def request(query, params):
if time() - (token['last_updated'] or 0) > 1800: if time() - (token['last_updated'] or 0) > 1800:
obtain_token() obtain_token()
@ -63,25 +60,52 @@ def response(resp):
resp_json = loads(resp.text) resp_json = loads(resp.text)
user_language = resp.search_params['language']
for result in resp_json['results']: 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( results.append(
{ {
'template': 'map.html', 'template': 'map.html',
'type': result.get('poiCategory'),
'title': result['name'], 'title': result['name'],
'links': links,
'latitude': result['center']['lat'], 'latitude': result['center']['lat'],
'longitude': result['center']['lng'], 'longitude': result['center']['lng'],
'url': result['placecardUrl'], 'url': result['placecardUrl'],
'boundingbox': [box['southLat'], box['northLat'], box['westLng'], box['eastLng']], 'boundingbox': boundingbox,
'geojson': {'type': 'Point', 'coordinates': [result['center']['lng'], result['center']['lat']]}, 'geojson': {'type': 'Point', 'coordinates': [result['center']['lng'], result['center']['lat']]},
'address': { 'address': {
'name': result['name'], 'name': result['name'],
'house_number': result.get('subThoroughfare', {}), 'house_number': result.get('subThoroughfare'),
'road': result.get('thoroughfare', {}), 'road': result.get('thoroughfare'),
'locality': result.get('locality', {}), 'locality': result.get('locality'),
'postcode': result.get('postCode', {}), 'postcode': result.get('postCode'),
'country': result.get('country', {}), 'country': result.get('country'),
}, },
} }
) )