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 石油ストーブ

参考

Python,未分類

Posted by skw