import json
import socket
import urllib.error
import urllib.request
# ローカルサーチ
class LocalSearch:
def __init__(self, appid):
self.appid = appid
def search(self, query):
baseurl = 'https://map.yahooapis.jp/search/local/V1/localSearch'
params = {
'query': query,
'output': 'json',
'results': '3',
'sort': 'score',
}
url = '{}?{}'.format(baseurl, urllib.parse.urlencode(params))
headers = {
'User-Agent': 'Yahoo AppID: {0}'.format(self.appid),
}
req = urllib.request.Request(url, headers=headers)
with urllib.request.urlopen(req, timeout=3) as res:
body = res.read()
return self.__json2pois(body)
def __json2pois(self, data):
ydf = json.loads(data)
features = ydf['Feature']
result = []
for f in features:
if f['Geometry']['Type'] == 'point':
ll = f['Geometry']['Coordinates'].split(',')
poi = {'name':f['Name'], 'lat': ll[1], 'lon': ll[0]}
result.append(poi)
return result
try:
appid = 'YOUR APPLICATION ID' # アプリケーションIDを指定
query = '東京タワー'
pois = LocalSearch(appid).search(query)
for poi in pois:
print(poi['name'])
print(' {lat}, {lon}'.format(lat=poi['lat'], lon=poi['lon']))
print()
except socket.timeout as err:
print('timeout: {0}'.format(err))
except urllib.error.URLError as err:
print('URLError: {0}'.format(err))
except Exception as err:
print('Exception: {0}'.format(err))