forked from zaclys/searxng
		
	add apple maps engine
This commit is contained in:
		
							parent
							
								
									2bfb269f0a
								
							
						
					
					
						commit
						5dce299b22
					
				
					 2 changed files with 95 additions and 0 deletions
				
			
		
							
								
								
									
										89
									
								
								searx/engines/apple_maps.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								searx/engines/apple_maps.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,89 @@ | |||
| # SPDX-License-Identifier: AGPL-3.0-or-later | ||||
| # lint: pylint | ||||
| """Apple Maps""" | ||||
| 
 | ||||
| from json import loads | ||||
| from time import time | ||||
| from urllib.parse import urlencode | ||||
| 
 | ||||
| from searx.network import get as http_get | ||||
| 
 | ||||
| about = { | ||||
|     "website": 'https://www.apple.com/maps/', | ||||
|     "wikidata_id": 'Q276101', | ||||
|     "official_api_documentation": None, | ||||
|     "use_official_api": True, | ||||
|     "require_api_key": False, | ||||
|     "results": 'JSON', | ||||
| } | ||||
| 
 | ||||
| token = {'value': '', 'last_updated': None} | ||||
| 
 | ||||
| categories = ['map'] | ||||
| paging = False | ||||
| 
 | ||||
| search_url = "https://api.apple-mapkit.com/v1/search?{query}&mkjsVersion=5.72.53" | ||||
| 
 | ||||
| 
 | ||||
| def obtain_token(): | ||||
|     update_time = time() - (time() % 1800) | ||||
|     try: | ||||
|         # use duckduckgo's mapkit token | ||||
|         token_response = http_get('https://duckduckgo.com/local.js?get_mk_token=1', timeout=2.0) | ||||
|         actual_token = http_get( | ||||
|             'https://cdn.apple-mapkit.com/ma/bootstrap?apiVersion=2&mkjsVersion=5.72.53&poi=1', | ||||
|             timeout=2.0, | ||||
|             headers={'Authorization': 'Bearer ' + token_response.text}, | ||||
|         ) | ||||
|         token['value'] = loads(actual_token.text)['authInfo']['access_token'] | ||||
|         token['last_updated'] = update_time | ||||
|     # pylint: disable=bare-except | ||||
|     except: | ||||
|         pass | ||||
|     return token | ||||
| 
 | ||||
| 
 | ||||
| def init(_engine_settings=None): | ||||
|     obtain_token() | ||||
| 
 | ||||
| 
 | ||||
| def request(query, params): | ||||
|     if time() - (token['last_updated'] or 0) > 1800: | ||||
|         obtain_token() | ||||
| 
 | ||||
|     params['url'] = search_url.format(query=urlencode({'q': query, 'lang': params['language']})) | ||||
| 
 | ||||
|     params['headers'] = {'Authorization': 'Bearer ' + token['value']} | ||||
| 
 | ||||
|     return params | ||||
| 
 | ||||
| 
 | ||||
| def response(resp): | ||||
|     results = [] | ||||
| 
 | ||||
|     resp_json = loads(resp.text) | ||||
| 
 | ||||
|     for result in resp_json['results']: | ||||
|         box = result['displayMapRegion'] | ||||
| 
 | ||||
|         results.append( | ||||
|             { | ||||
|                 'template': 'map.html', | ||||
|                 'title': result['name'], | ||||
|                 'latitude': result['center']['lat'], | ||||
|                 'longitude': result['center']['lng'], | ||||
|                 'url': result['placecardUrl'], | ||||
|                 'boundingbox': [box['southLat'], box['northLat'], box['westLng'], box['eastLng']], | ||||
|                 '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', {}), | ||||
|                 }, | ||||
|             } | ||||
|         ) | ||||
| 
 | ||||
|     return results | ||||
|  | @ -540,6 +540,12 @@ engines: | |||
|     timeout: 3.0 | ||||
|     disabled: true | ||||
| 
 | ||||
|   - name: apple maps | ||||
|     engine: apple_maps | ||||
|     shortcut: apm | ||||
|     disabled: true | ||||
|     timeout: 5.0 | ||||
| 
 | ||||
|   - name: emojipedia | ||||
|     engine: emojipedia | ||||
|     timeout: 4.0 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 ta
						ta