010_レストラン検索

ホットペッパーAPIを利用したレストラン検索ができるLINE BOTのプログラム解説~API&LINE BOT②~

友達とお店を探している時、近くにおいしいごはん屋さんがないかなぁと思ったことはありませんか?その際にスマホを取り出し、『新宿 イタリアン』といった言葉でググる方も多いと思います。が、繁華街だと密集してしまいますし、正直外でお店を検索すること自体、おっくうですよね。もっと直観的に見つけられればいいのですが…

今回ご紹介するのは、そんな悩みをお持ちの方におススメのレストラン検索アプリの作り方です!(^^)!

こんな方におススメ(*´▽`*)
・Web APIを使ったLINEアプリを作ってみたい
・Pythonを使ったプロダクトを作ってみたい
・近くのおいしいお店をすぐに調べたい

ご紹介するアプリを使うと、LINEのチャットに簡単な条件を入力するだけでレストランの候補をすぐに見つけることができちゃいます(`・ω・´)

概要

アプリの仕組みですが、

ホットペッパーグルメのAPIを利用して、LINEから入力した検索条件に合致したお店を表示するLINE BOT (^_-)-☆

というものになります('ω')ノ

前回はLINEと楽天トラベルそれぞれのWeb APIを使用し、指定した日付・地域のホテルを空室検索する簡単なアプリを作りました。今回も同様に、ホットペッパーが提供している無料のWeb APIを利用し、LINEと連携させます。

そのため、使用するサーバー等の設定も前回と同様のものになります。こちらで基本の流れを解説していますので、併せてご覧ください(^^♪

大まかな仕組み

早速ですが今回作成するのは、LINEに以下3つの店舗情報を入力すると該当するお店が表示されるアプリです。

①場所(必須)

②ジャンル(任意)
以下から選択して入力
・居酒屋
・ダイニングバー・バル
・創作料理
・和食
・洋食
・イタリアン・フレンチ
・中華", "焼肉
・韓国料理
・アジア・エスニック料理
・各国料理
・カラオケ・パーティ
・バー・カクテル
・ラーメン
・お好み焼き・もんじゃ
・カフェ・スイーツ
・その他グルメ

③予算(任意)
500円~30,001円
※必ず、「円」をつけてください。

例)
「新宿駅」
ダイニングバー・バル
5000円

※場所は必須ですが、ジャンルと予算は任意になるので、入力がない場合は、場所だけが検索条件になります。
※入力形式が違うとエラーになります。
(鍵カッコがない、ジャンルが間違っている、「円」がない、など)

特に変わった項目の無い、グルメアプリやレストラン検索サイトによくある検索条件ですね。これらを送信すると、以下のような感じでアプリから条件に合致したレストランの情報が返ってきます。

画像1

ファイルの構成

まず、ファイルの構成を解説していきましょう!
ファイル構成は基本的に前回と同じで、実際のPythonのプログラムを書く「core.py」と「main.py」を用意します。

シンプルにするため、今回の記事で解説するのも上記2つだけにしています。その他のファイルは前回使用した同名のものと同じになりますので、内容について知りたい方は前回の記事をご覧ください!(^^)!

画像2

これから順を追ってコードの解説をしてきますが、core.pyとmain.pyの全コードは、core.pyのまとめmain.pyのまとめを参照してください。

今回も前回同様に①「LINEのメッセージ関係の処理」(LINE Messaging API)と②「レストラン関係の処理」(ホットペッパーAPI)の二つを作成します。

ホットペッパーAPI関係のプログラムを作る(core.py)

まずは、ホットペッパーAPIからデータを取得するプログラムを書いてみましょう。
APIからデータ取得する際にはまず公式のドキュメントを確認して、入力パラメータの設定値を確認します。

今回は、「場所」「お店のジャンル」「予算」の三つを入力して、「店名」「アクセス方法」「URL」の三つを取得することを目標とします。

また、「場所」は必須入力として、「お店のジャンル」と「予算」は任意での入力項目にします。

公式ドキュメントを見ると、入力パラメーターには、大まかな「エリア名」しかないため、前回同様に「緯度・経度」を指定します。

1.場所から緯度・経度を計算する

ココは前回同様なので割愛しますが、ココまでで完成したコードは以下になります。

from geopy.geocoders import Nominatim

def geocoding(place):
  geolocator = Nominatim(user_agent="my-application")
  location = geolocator.geocode(place, timeout=10)
  if location is None:
      return
  else:
      latitude = location.latitude
      longitude = location.longitude
      return latitude, longitude

2.ホットペッパーの検索を行う

ホットペッパーAPIを利用して、レストランの検索を行う関数"hotpepper(push_text)を定義します。この関数に「場所名」を入力することで、LINE BOTのメッセージとして送信する文章を出力します。

ここから先は

25,068字 / 1画像

¥ 1,200

この記事が気に入ったらサポートをしてみませんか?