LoginSignup
3
3

More than 5 years have passed since last update.

Python で Yahoo!ローカルサーチAPI をコールするサンプルコード

Last updated at Posted at 2018-09-21

ソースコード

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))

実行結果

$ python --version
Python 3.7.0b3

$ python localsearch.py 
宇明屋東京タワー店
 35.658591944444, 139.745463333333

東京タワー
 34.729707500000, 136.519455833333

マザー牧場CAFE東京タワー店
 35.658591944444, 139.745463333333

参考資料

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3