Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

近くのラーメン屋を探す

 近くのラーメン屋を探します。GeoJSのAPIによりIPアドレスから現在地の位置情報を取得します。取得した位置情報より、リクルートWebサービスが提供するHotpepperグルメサーチAPIを使って「現在地から2000m以内のラーメン屋」を検索します。
Powered by ホットペッパー Webサービス

 HTTP通信ライブラリrequestsによりGeoJSにアクセスすると戻り値として位置情報が得られます。また、ホットペッパー Webサービスにアクセスし、検索クエリとして緯度・経度、距離(2000m以内)、キーワード('ラーメン')、件数(50)を送信します。得られたレスポンスから店名と住所を表示します。

関連記事

喫煙できる店を検索する

環境
  • windows10 home
  • Jupyter notebook 6.4.11
  • Python 3.10.4
準備  

HotpepperグルメサーチAPIを利用するにはAPIキーが必要になるため、こちらのサイトでメールアドレスを登録しキーを取得します。
webservice.recruit.co.jp
GeoJSのAPIは登録不要で、リクエストを送ればレスポンスが得られます。

コード

 まずrequests.getでGeoJSのリクエストURLにアクセスし位置情報を取得します。戻り値に含まれるキー'latitude'の値が緯度、'longitude'の値が経度になります。
 続いてHotpepperグルメサーチAPIのリクエストURLにアクセス、取得した緯度、経度を含む検索クエリを渡します。戻り値をresponceに入れ、json.loadsにより辞書形式に変換します。 APIリファレンスによると、店舗の情報は results>shop の構造となっており、その内容をresultに取り込みます。その中の'name'(店名)、'address'(住所)を表示します。
 コード中の'xxxxxxxxxxxxxxxxxx'には実際には予め取得したHotpepperグルメサーチのAPIキーを入れます。

import requests
import json

# GeoJSにリクエストしIPアドレスから現在地の緯度・経度を取得
geo_request_url = 'https://get.geojs.io/v1/ip/geo.json'
data = requests.get(geo_request_url).json()

# 検索クエリ
query = {
        'key': 'xxxxxxxxxxxxxxxxxx', # APIキー
        'lat': data['latitude'], # 現在地の緯度
        'lng': data['longitude'], # 現在地の経度
        'keyword': 'ラーメン', # キーワードに「ラーメン」
        'range': '4', # 2000m以内
        'count': 50, # 取得データ数
        'format': 'json' # データ形式json
        }

# グルメサーチAPIのリクエストURL        
url = 'http://webservice.recruit.co.jp/hotpepper/gourmet/v1/'

# URLとクエリでリクエスト
responce = requests.get(url, query)

# 戻り値をjson形式で読み出し、['results']['shop']を抽出
result = json.loads(responce.text)['results']['shop']

# 店名、住所を表示
for i in result:
    print(i['name']+' : '+i['address'])

実行結果

現在地から2000m以内のラーメン店の一覧が表示されます。ただしIPアドレスから取得した現在地は大雑把なので実際の現在地には一致しません。   

中華料理 銀河楼 : 神奈川県横浜市神奈川区東神奈川2-41-1
すずき家 子安本店 : 神奈川県横浜市神奈川区子安通1-5-4
ラーメン大桜 東神奈川駅前店 : 神奈川県横浜市神奈川区西神奈川1-7-10
とんぱた亭 新子安店 : 神奈川県横浜市神奈川区新子安1-2-5 オルトモールコート2F
ShiNaChiKu亭 : 神奈川県横浜市神奈川区反町2-15-14 ヒルトップ反町1F
大雄ラーメン 入江町店 : 神奈川県横浜市神奈川区入江2-20-6
WOOD&PEACE : 神奈川県横浜市神奈川区六角橋1-4-4
横浜家系ラーメン 山崎家 白楽駅前店 : 神奈川県横浜市神奈川区白楽121-6

以下のサイトを参考にさせていただきました

Zenn > ホットペッパーのAPIを使ってレストランのデータを取得する
note > 【Python】IPアドレスから位置情報を地図に表示してみた
Elsaの技術日記(徒然なるままに) > python/Go言語でのPCの位置情報取得(緯度・経度取得)

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村