PythonでYahoo APIを使ってみる
Yahoo!デベロッパーネットワークにはYahooが提供しているWEB APIの使い方が説明されている。ショッピングAPIの中にある「キーワードランキングAPI」がおもしろそうなのでPythonで取得してみる。
作成したプログラムではYahooショッピングでどんなキーワードで検索しているのか、上位50番目まで表示させてみた。季節柄を反映してか冬物商品が多く、お得商品を検索するためのキーワードがあったりと、意外とおもしろい結果だった。
実験環境
- Windows7
- Python 2.7
キーワードランキングAPI
キーワードAPIの使い方はショッピング:キーワードランキングAPI – Yahoo!デベロッパーネットワークにあり、説明にしたがってPythonでプログラムする。
キーワードランキングはYahoo!ショッピングで検索されている人気の検索キーワードを取得できるAPIです。人気の検索キーワード以外に、急上昇している検索キーワードも取得できます。
アプリケーションID
Yahoo APIを使うためには、Yahoo! JAPAN IDとアプリケーションIDが必要なので、Yahoo!デベロッパーネットワーク ヘルプ – Webサービスを利用するのに必要なものからあらかじめ取得しておく。
リクエストURL
JSONで結果を取得するので下記のURLを使う
http://shopping.yahooapis.jp/ShoppingWebService/V1/json/queryRanking
リクエストパラメータ
- appid
- 必須。事前に取得したアプリケーションIDの文字列をセットする
- hits
- 検索件数を指定する。最大100件
キーワードランキングAPI
プログラム
#!/usr/bin/env python #coding:utf-8 import sys import urllib import json def yapi_topics(): url = 'http://shopping.yahooapis.jp/ShoppingWebService/V1/json/queryRanking?' appid = 'YourApplicationID' params = urllib.urlencode( {'appid': appid, 'hits': 50, }) response = urllib.urlopen(url+params) return response.read() def do_json(s): data = json.loads(s) #print(json.dumps(data, sort_keys=True, indent=4)); sys.exit() item_list = data["ResultSet"]["0"]["Result"] #print(json.dumps(item_list, sort_keys=True, indent=4)) #print item_list.keys() ranking = {} for k, v in item_list.iteritems(): try: rank = int(v["_attributes"]["rank"]) vector = v["_attributes"]["vector"] query = v["Query"] ranking[rank] = [vector, query] except: if k == "RankingInfo": StartDate = v["StartDate"] EndDate = v["EndDate"] print u"集計開始日:", StartDate print u"集計終了日:", EndDate print '-' * 40 ranking_keys = list(ranking.keys()) ranking_keys.sort() #ranking_keys.reverse() /* 降順に表示する */ for i in ranking_keys: print i, ranking[i][0], ranking[i][1] if __name__ == '__main__': json_str = yapi_topics() do_json(json_str)
プログラムでハマッタところ
- jsonモジュールで処理した結果はunicode文字列なので注意!!
- 実行結果をリダイレクトでファイル出力するときはcp932でエンコードしないとエンコードエラーが発生する
実行結果
最初の2行に集計の開始日、終了日を表示。次行からは、ランキングの順位(1~50位)、前日と比較しての順位が上がった(up)か下がった(down)か、あるいは初めて登場した(new)かの表示、検索キーワードの順で並ぶ。
集計開始日: 2012-11-28 集計終了日: 2012-11-28 ---------------------------------------- 1 new ドッキングワンピ -春 -夏 2 up (デュベティカ モンクレール ラルフローレン TATRAS コロンビア ハイドロ ゲン カナダグース ガッバーナ) -ベスト 3 up ニット ワンピ 4 down セール 5 down あすつく 6 down 一体型 VHS HDD 7 down D-BW500 8 down iphone5 ケース 9 new クリスマスケーキ 10 up スープ 11 new led 100w相当 アイリス 12 up ジャージ 上下 13 down ダウンベスト 14 new ターコイズ biora 15 down アバクロ 16 up -中綿 -ダウンベスト 17 new "スマホ手袋" 18 down サンタ コスプレ 19 down ダウンジャケット 20 down ダッフルコート 21 down コーチ 22 up 福袋 23 up 暖房 24 down ティファニー 1837 インターロッキング ネックレス TIFFANY 三光 25 new zozotown 26 new 遠赤外線パネルヒーター 27 down コーチ COACH 財布 コーチ 財布 二つ折り長財布 44001 SBWBK 28 up ダウンジャケット -モッズコート -スタジャン 29 down リサイクルトナー トナー カートリッジ 322 ブラック キヤノン ×1個 30 down VF-25S リニューアル -スーパー -アーマードパーツ 31 down ULTRA-ACT ゾフィー -エース 32 down ノースフェイス 33 down ムートンブーツ 34 down ユニクロ オンラインショップ 35 up 加湿器 36 down ドラゴンクエスト スライムキーボード 37 down 財布 38 down バーバリー 39 up (訳あり わけあり ワケあり) 40 down パーカー 41 down ミリタリージャケット 42 up (切り落とし 訳あり わけあり ワケあり 端 端っこ 切れ端) 43 down ワンピース 44 down ニンテンドー3DS LL とびだせ どうぶつの森 パック 45 down とびだせ どうぶつの森 46 down ハイドロゲン 47 down ムートン 48 down ディーゼル 49 down ティファニー 50 new 石油ストーブ