utamaro’s blog

誰かの役に立つ情報を発信するブログ

pythonで楽天apiを実行する方法

楽天の会員登録をする

これは登録画面に沿って登録をするだけです。

登録画面のurlを載せます。

【楽天】ログイン

楽天のアプリIDを発行する

アプリURLはhttp://localhost.comで登録しました。

やり方を調べたところ、自分のgithubのurlを入れるというのも見つけました。

apiを試していたところでは、このurlがlocalhostだったことで困ったことは起きませんでした。

apiを実行するためのプログラムを作成する

RakutenApiというクラスを作成して、継承して使用します。

RakutenApi
├─ Api1
└─ Api2

RakutenApiクラスは個別の共通のパラメータを入れたり、urlやparamsを生成するためのメソッドを用意しています。

import requests

class RakutenApi(object):

    root = 'https://app.rakuten.co.jp/services/api'
    api_path = ''
    common_params = {
        'applicationId': 'xxxxxx',  # アプリID
        'affiliateId': 'xxxxxxx.xxx.xx.xxxxx',  # アフィリエイトID
        'format': 'json',
        'formatVersion': 2,
    }

    def get_url(self):
        return self.root + self.api_path

    def gen_params(self, params):
        cp_params = self.common_params.copy()
        cp_params.update(params)
        return cp_params

    def get(self):
        pass

ジャンル検索apiを作成する

RakutenApiクラスを継承したIchibaGenreクラスを作成します。

↓のドキュメントを見つつ作成しています。 https://webservice.rakuten.co.jp/api/ichibagenresearch/

以下のコードを追加して、実行すると検索できます。

class IchibaGenre(RakutenApi):

    api_path = '/IchibaGenre/Search/20140222'

    genreId = 0

    def get(self):
        params = self.gen_params({'genreId': self.genreId})
        r = requests.get(self.get_url(), params)
        return r.text


def main():
    ichiba_genre = IchibaGenre()
    ichiba_genre.genreId = 200162
    r = ichiba_genre.get()
    print(r)


if __name__ == '__main__':
    main()

どうでもよいですが、classとdefとmainの間を2行空けるとキレイです。

実行結果

市場ジャンルを取得したときの結果です。(一部抜粋)

基本はchildrenを見て、更に絞り込みをします。

{
    "parents": [],
    "current": {
        "genreId": 200162,
        "genreName": "本・雑誌・コミック",
        "genreLevel": 1
    },
    "brothers": [
        {
            "genreId": 101240,
            "genreName": "CD・DVD",
            "genreLevel": 1
        },
        {
            "genreId": 100804,
            "genreName": "インテリア・寝具・収納",
            "genreLevel": 1
        }
    ],
    "children": [
        {
            "genreId": 101266,
            "genreName": "小説・エッセイ",
            "genreLevel": 2
        },
        {
            "genreId": 208663,
            "genreName": "資格・検定",
            "genreLevel": 2
        }
    ],
    "tagGroups": [
        {
            "tagGroupName": "限定特典",
            "tagGroupId": 1001050,
            "tags": [
                {
                    "tagId": 1011603,
                    "tagName": "楽天限定特典付き",
                    "parentTagId": 0
                },
                {
                    "tagId": 1011604,
                    "tagName": "店舗共通特典付き",
                    "parentTagId": 0
                }
            ]
        }
    ]
}