2021年12月30日木曜日

楽天APIとPythonで楽天市場のランキングを取得する

楽天はいくつかAPIを提供していて(API一覧)、楽天市場のランキングもAPIで取得できる。今回はPythonで楽天市場のランキングを取得してみる。


環境

WSL2(Ubuntu20.04)。

$ lsb_release -dr
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
$ python3 -V
Python 3.8.10
$ pip3 show requests
Name: requests
Version: 2.25.1
...


ランキングを取得する事前準備

APIの使用にはアプリケーションIDが必要なので事前に取得しておく。アプリケーションIDはRakuten Webserviceでアプリを登録することで取得できる。

今回は楽天市場のランキングを取得したいので、いくつかあるAPIのうち楽天商品ランキングAPIを使用する。このAPIではランキングのジャンルを指定できるので、チョコレートのランキングを取得してみる。

ジャンル指定にはジャンルIDが必要で、ジャンルIDは楽天市場ジャンル検索APIで取得できる。ここではAPIテストフォームを使ってジャンルIDを取得する。ジャンルの階層構造の最上位ジャンルIDが0になっているようで、テストフォームでgenreIdに0を指定してGETボタンを押すとJSON(デフォルト)で最上位のジャンル一覧を取得できる。


その一覧に「スイーツ・お菓子」があるので、そのジャンルIDである551167で再度検索するとチョコレートのジャンルIDが201136であることがわかる。このジャンルIDでランキングを取得する。



楽天商品ランキングを取得する

楽天商品ランキングAPIで楽天市場のチョコレートのランキングを取得する。Pythonコードは以下の通り。

import os
import json

import requests

# APIのエンドポイント
ENDPOINT = 'https://app.rakuten.co.jp/services/api/IchibaItem/Ranking/20170628'

RAKUTEN_APP_ID = 'Rakuten Webserviceで取得したアプリケーションID'


def show_ranking(api_res):
    """ランキング順位とその商品名を表示
    """
    res = json.loads(api_res)
    items = res.get('Items')
    for item in items:
        rank = item.get('rank')
        item_name = item.get('itemName')

        print(f'{rank}位 {item_name}\n')


def get_ranking(genre_id):
    params = {
        'applicationId': RAKUTEN_APP_ID,
        'format': 'json',
        'formatVersion': 2,
        'genreId': genre_id
    }

    r = requests.get(url=ENDPOINT, params=params)
    assert r.status_code == 200, f'status code: {r.status_code}'

    show_ranking(r.text)


def main():
    get_ranking(genre_id='551167')


if __name__ == '__main__':
    main()


以下のようにランキング一覧が取得できる。

1位 ポイント10倍 送料無料 お歳暮 御歳暮 ギフト クリスマス プレゼント お年賀 ヨックモック お菓子 スイーツ 詰め合わせYCD-30 サンク デリス(5種45個入り)洋菓子 クッキー 手土産 個包装 内祝い 焼き菓子 お祝い お返し お取り寄せ 誕生日 チョコ 帰省土産 のし 缶

2位 送料無料 リンツ Lindt チョコレート リンドール 23個入り テイスティングセット| ギフト 洋菓子ギフト かわいい お菓子 スイーツ プレゼント 可愛い 手土産 内祝い 内祝いお返し お礼 リンツチョコ 誕生日 クリスマス X'mas 冬ギフト 退職 職場

3位 お歳暮 ギフト HTA-30AWN 送料無料 タルト・フリュイ・アソート S 秋冬限定お礼 誕生日 プレゼント お菓子 洋菓子 手土産 焼き菓子 出産 内祝 贈り物 お返し 退職 引越し 入学 卒業 定年 退職 ご挨拶 御歳暮
...

取得できる商品の名称は一般的な商品名ではなく、楽天市場の各店舗が設定した名称になっている。APIでは他にも年代や性別も指定できるが、ジャンルIDと同時に指定できない。


0 件のコメント:

コメントを投稿