【超初心者向け】YOLPで店舗情報を取得する(Python3)
概要
YOLPのなかでもYahoo!ローカルサーチAPIというYahoo!JAPANが提供しているAPIで、お店の情報を取得します。言語はPython3です。 developer.yahoo.co.jp
うまくいくとこのように、入力した単語にヒットしたお店の情報をJSONで返してくれます。
YOLPを使うための前準備
1. アカウント作成またはログイン
YOLPを利用するにはアカウント登録が必要です(無料)。
通常のYahoo!JAPANのIDで大丈夫です。ログインしましょう。
するとこのような画面になります。
2. アプリケーションの登録
ログインできたら画面の右端にある「アプリケーションを開発」をクリックしましょう。
ご利用ガイドが出てきました。開発手順がわかりやすく載っているので是非読んでください。
では、「アプリケーションを登録」をクリックして次へ進みましょう。
3. アプリケーションの情報入力
3-1. Web APIを利用する場所
いずれはスマホアプリから使いたいなぁ、と思ったので「Yahoo!ID連携v2」の「クライアントサイド」を選択しました。
どっちでもいい、みたいなことも書いてあるんでどっちでもいいのかな?(良く分かってないです)
3-2. アプリケーションの基本情報
基本そのままでいいのですが、なんとなくアプリケーション名を変更してみました。
お好みの名前で大丈夫です。私は「TestApp」にしてみました。
3-3. ガイドラインを確認する
そのまんまですね。ガイドラインを確認して同意しましょう!
3-4. 「確認」して「登録」
3-1から3-3まで出来たかどうか、今一度確認したら「確認」をクリックしましょう。
もう一回!もう一回だけ確認しましょう。下線部はOKですか?大丈夫なら「登録」をクリックしてアプリケーションを登録しましょう。
4. 登録完了!
登録完了です!お疲れ様です。
Client ID(アルファベットと数字の羅列)が表示されていると思います。
これは大事なものなので、こっそりと大事にしましょう。
また、あとで使うのでコピーしておくとラクチンです。
Python3のコードを書く
1. 前準備(Client IDのコピー)
さっそくコードを書いていきましょう!
と、その前にYOLPのアプリケーションのClient IDをコピーしておいてください!
アプリケーションの管理>アプリケーションの詳細 でClient IDを確認できます。
2. 必要なライブラリのインポート
ではさっそくコードを書いていきましょう。
urllib.request
, urllib.parse
, pprint
, json
をインポートしましょう。
import urllib.request import urllib.parse import json import pprint
それぞれインポートする理由はこんな感じです。
クリックすると公式ドキュメントページに飛べるのでそちらも参考にしてください。
urllib.request
:URLを開くために使います。urllib.parse
:検索したいワードをパーセントエンコーディングするために使います。json
:JSON形式にするために使います。pprint
: 店舗情報を見やすく表示するために使います。
3. 要素(パラメータ)を指定する
今回必要な要素は元のURL
, Client ID
, 検索したいワード
, アウトプットの形式
です。
さて、それぞれの要素を指定しましょう!
ちなみに、この要素のことを以下パラメータと呼ぶことにします。
元のURL
:今回はYOLPのなかでもYahoo!ローカルサーチAPIを使うので、https://map.yahooapis.jp/search/local/V1/localSearch
です。Client ID
:先ほどコピーしたあなたのアプリケーションのClient IDです。アルファベットや数字の羅列。検索したいワード
:「ラーメン屋」でも「駄菓子屋」でも動いてほしいので、input()
で好きな文字列を入力できるようにしましょう。また、そのままだと使えないのでパーセントエンコーディングしましょう(後述)。アウトプットの形式
:今回はJSON形式にしたいので、"json"
としましょう。 これらをコードで書くとこういう感じになります!
BASE_URL = "https://map.yahooapis.jp/search/local/V1/localSearch" # Yahoo!ローカルサーチAPI CLIENT_ID = "ここにClient IDをペーストしてください" # あなたのClient ID QUERY = urllib.parse.quote(input('検索したいワードは?:')) # 入力されたクエリをパーセントエンコーディング OUTPUT="json"
だいたい読めそう。でも待って。パーセントエンコーディングってなんでしょう?
パーセントエンコーディング(英: percent-encoding)とは、URIにおいて使用できない文字を使う際に行われるエンコード(一種のエスケープ)の名称である。 一般にURLエンコードとも称される。1
要は、日本語はURIで使えないから、代わりに日本語以外で表しましょうってことなんですかね(?)
パーセントエンコーディングのやり方は簡単。
urllib.parse.quote()
の()の中に入れちゃうだけ。
input()
と組み合わせるのもチョイチョイです。
word = urllib.parse.quote(input())
とすれば、入力した文字をパーセントエンコーディングしたものがword
のなかに入ります!
4. パラメータを渡す
Web APIへのパラメータの渡し方として、公式にもありますがさらっと説明します。
まずはWeb APIの使い方(GETリクエスト)の「Web APIへのパラメータの渡し方」をごらんください。
developer.yahoo.co.jp
パラメータ名=パラメータの値
が基本で、それらを&
でつなげばいいということが書いてありますね。
では次に、Yahoo!ローカルサーチAPIのリクエストパラメータ一覧をごらんください。
今回必要なアプリケーションID、検索クエリ、出力形式が見つけられたでしょうか?
アプリケーションIDはappid
, 検索クエリはquery
, 出力形式はoutput
というのがパラメータ名となっているようです。
ということは、パラメータの渡し方はappid=あなたのID&query=Query&output=OUTPUT
で良いのです。
これをコードに書くとこういう感じになります。
url = BASE_URL + "?appid=%s&query=%s&output=%s" % (CLIENT_ID,QUERY,OUTPUT) print(url) # どんなURLになったか確認できたら、このprint文は消して大丈夫です。
5. 出力(これで最後)
やっとURLが指定できたので、今度は出力しましょう。
さて、さっき一生懸命用意したURLを開くには、urllib.request.urlopen()
が必要になります。
url
を開きたいので、urllib.request.urlopen(url)
と書けば良いですね。
そして、文字列全てを読み込みたいのでうしろに.read()
をつけましょう。
そして、見やすいようにpprint
で出力しましょう。
コードで書くとこうなります。
json_tree = json.loads( urllib.request.urlopen(url).read()) pprint.pprint(json_tree)
さぁ、いままでのコードを実行してみましょう!
入力したクエリに応じてお店の情報が返ってきたら成功です!
最後に
APIもPython3も初めて!という方向けにかなり丁寧に書いたつもりです。
これを読んでみなさんの楽しいプログラミング生活に少しでも貢献出来たらうれしいです。
また私自身も初心者なので、もし「間違っている」とか「ここはこの表現のほうがいい」等ありましたらコメントでお願いいたします。
参考
参考にさせて頂いた記事です。ありがとうございました。 qiita.com