データサイエンスにおいて情報取得技術は基礎ということで。そのお勉強。
pythonでAPIからデータ取得して表示するところまで
まずはサイエンスするためのデータを持ってくる手法を学ぼうということで、APIからデータを持ってきてみるとする。
まず、APIって
APIとは
あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。
データ持ってるやつ(ツイッターとか)に外部からデータください(pythonに関するツイートくださいとか)って言ったら、データ返してくれるんだけど、そのための決まりごとみたいな感じだ。
APIなんでもいいから使ってみようということなので、どっからなんのデータを取ってこよう。腹が減ってるので飯系がいい→飯系のwebサービス...→yelpに決定。
Yelp APIの使い方
ドキュメントはこちら。
YelpのAPI Consoleってのが便利で、あんまりドキュメンテーション見なくても動きがわかる。とりあえず、場所とキーワードでレストラン10件ひっかけてプリントしてくれるプログラムを書くとしてみむ。パラメータterm
とlocation
がそれぞれに対応しているみたい。(ドキュメントみながら)
説明しながら進むのがめんどくさくなってきたので先に見せると、できたコードは以下。
OAuthリクエスト扱うのに便利っぽかったのがrauthだったので、それ使いました。
import urllib2, sys
import rauth
import ConfigParser
inifile = ConfigParser.ConfigParser()
inifile.read("config/secrets.ini")
def search_params(term, location):
params = {}
params["term"] = term
params["location"] = location
params["limit"] = "10"
return params
def get_restaurants(params):
consumer_key = inifile.get("yelp", "consumer_key")
consumer_secret = inifile.get("yelp", "consumer_secret")
access_token = inifile.get("yelp", "access_token")
access_token_secret = inifile.get("yelp", "access_token_secret")
session = rauth.OAuth1Session(
consumer_key = consumer_key,
consumer_secret = consumer_secret,
access_token = access_token,
access_token_secret = access_token_secret)
request = session.get("http://api.yelp.com/v2/search", params=params)
data = request.json()
session.close()
return data
def main():
term = sys.argv[1]
location = sys.argv[2]
params = search_params(term, location)
response = get_restaurants(params)
restaurants_info = response["businesses"]
restaurant_names = []
for restaurant_info in restaurants_info:
restaurant_name = restaurant_info["name"]
print restaurant_name
if __name__ == "__main__":
main()
うぇい、非常にシンプル。(python文法全く知らなかったので当初:
とか忘れまくりましたが。)
パラメータつくるメソッドと、API叩いてdataもらってくるメソッド作って、そいつら使っただけですな。"business"
とかname
はそれぞれレスポンスのjsonのkey名です。
とくにpython初心者の僕にとって、最後の二行、
if __name__ == "__main__":
main()
これ調べたり。(なぜ__name__ == "main"をするか)あとはconfigparserもね、調べた。(これとか)
とまぁ話がそれたけど、本題にもどり、コード出来上がったので、コンソールで、
python find_restaurant.py food tokyo
で
大和寿司
沼津港 新宿西口店
とんき
Full Monty
丸山珈琲 西麻布店
AW Elements 六本木ヒルズ店
原宿餃子楼
The chef's table
一蘭
と出てきた。うむ。APIから情報取得完了!いえい。(gitはこちら)
まぁこれだけじゃなんというか普通だし、簡単すぎるよね。
結果みても、「あ、一蘭しってるぞ!」くらいにしかならないね。。
なので、もう少しひねってみることにことする。
→次回以降に続く.更新時にリンク貼ります.
※お願い: パイソニスタな方は、ぜひコードに不自然なところ等あれば突っ込みをいれてください。