51
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-11

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

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

まぁこれだけじゃなんというか普通だし、簡単すぎるよね。
結果みても、「あ、一蘭しってるぞ!」くらいにしかならないね。。
なので、もう少しひねってみることにことする。
→次回以降に続く.更新時にリンク貼ります.


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

51
59
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?