48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								## OpenStreetMap (Map)
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# @website     https://openstreetmap.org/
							 | 
						||
| 
								 | 
							
								# @provide-api yes (http://wiki.openstreetmap.org/wiki/Nominatim)
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# @using-api   yes
							 | 
						||
| 
								 | 
							
								# @results     JSON
							 | 
						||
| 
								 | 
							
								# @stable      yes
							 | 
						||
| 
								 | 
							
								# @parse       url, title
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from json import loads
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# engine dependent config
							 | 
						||
| 
								 | 
							
								categories = ['map']
							 | 
						||
| 
								 | 
							
								paging = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# search-url
							 | 
						||
| 
								 | 
							
								url = 'https://nominatim.openstreetmap.org/search/{query}?format=json'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# do search-request
							 | 
						||
| 
								 | 
							
								def request(query, params):
							 | 
						||
| 
								 | 
							
								    params['url'] = url.format(query=query)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return params
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# get response from search-request
							 | 
						||
| 
								 | 
							
								def response(resp):
							 | 
						||
| 
								 | 
							
								    results = []
							 | 
						||
| 
								 | 
							
								    json = loads(resp.text)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # parse results
							 | 
						||
| 
								 | 
							
								    for r in json:
							 | 
						||
| 
								 | 
							
								        title = r['display_name']
							 | 
						||
| 
								 | 
							
								        osm_type = r.get('osm_type', r.get('type'))
							 | 
						||
| 
								 | 
							
								        url = result_base_url.format(osm_type=osm_type,
							 | 
						||
| 
								 | 
							
								                                     osm_id=r['osm_id'])
							 | 
						||
| 
								 | 
							
								        # append result
							 | 
						||
| 
								 | 
							
								        results.append({'title': title,
							 | 
						||
| 
								 | 
							
								                        'content': '',
							 | 
						||
| 
								 | 
							
								                        'url': url})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # return results
							 | 
						||
| 
								 | 
							
								    return results
							 |