Python
データマイニング

【データサイエンス基礎】APIからデータ取得

More than 3 years have passed since last update.

データサイエンスにおいて情報取得技術は基礎ということで。そのお勉強。


pythonでAPIからデータ取得して表示するところまで

まずはサイエンスするためのデータを持ってくる手法を学ぼうということで、APIからデータを持ってきてみるとする。


まず、APIって


APIとは


あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。


データ持ってるやつ(ツイッターとか)に外部からデータください(pythonに関するツイートくださいとか)って言ったら、データ返してくれるんだけど、そのための決まりごとみたいな感じだ。

APIなんでもいいから使ってみようということなので、どっからなんのデータを取ってこよう。腹が減ってるので飯系がいい→飯系のwebサービス...→yelpに決定。


Yelp APIの使い方

ドキュメントはこちら

YelpのAPI Consoleってのが便利で、あんまりドキュメンテーション見なくても動きがわかる。とりあえず、場所とキーワードでレストラン10件ひっかけてプリントしてくれるプログラムを書くとしてみむ。パラメータtermlocationがそれぞれに対応しているみたい。(ドキュメントみながら)

説明しながら進むのがめんどくさくなってきたので先に見せると、できたコードは以下。

OAuthリクエスト扱うのに便利っぽかったのがrauthだったので、それ使いました。


find_restaurant.py

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はこちら)

まぁこれだけじゃなんというか普通だし、簡単すぎるよね。

結果みても、「あ、一蘭しってるぞ!」くらいにしかならないね。。

なので、もう少しひねってみることにことする。

→次回以降に続く.更新時にリンク貼ります.


※お願い: パイソニスタな方は、ぜひコードに不自然なところ等あれば突っ込みをいれてください。