【楽天API】楽天ジャンルID一覧&Pythonでの調べ方

この記事で解決するお悩み
  • 楽天APIのジャンルID一覧が知りたい
  • 楽天APIのジャンルIDを自分で調べたい

はじめに

楽天APIのジャンルID一覧とPythonでの調べ方を紹介します。ジャンルIDとは、楽天APIで楽天商品のジャンルを指定する際に必要なIDのことです。このジャンルIDを使えば、簡単にジャンルごとのランキングやURLを拾ってくることができます。

今回は、Pythonのサンプルコードも載せてあるので、「より深い階層のジャンルIDを調べたい!」という方や、IDの追加や更新が起きた際に「最新のジャンルIDを調べたい!」という方に役立つ情報となっています。ぜひ参考にしてみてください。

ジャンルID一覧(レベル2まで)

PythonでのジャンルID調べ方

事前準備

楽天APIのアプリ登録が済んでいない方(アプリケーションIDまだ発行していない方)はRakuten Webserviceのページの「アプリID発行」から登録・ID発行を済ませてください。(下記画像青枠部分)

Pythonソースコード

楽天ジャンル検索APIを使って、ジャンルを取得することも可能です。早速コード載せていきます。11行目(ハイライトされた箇所)のアプリIDを適宜自分のIDに変えてください。

import requests
import pandas as pd
import json
import time
import copy


#urlの作成
base_url = 'https://app.rakuten.co.jp/services/api/IchibaGenre/Search/20140222' #ジャンル検索APIのベースとなるURL
item_parameters = {
            'applicationId': '自分のアプリケーションID',
            'format': 'json',
            'formatVersion': 2,
            'genreId': 0,
}

#ジャンルID、ジャンル名を取得する
#df: 取得ジャンル情報、g_list: 対象ジャンル情報、g_level: ジャンル階層、g_id: ジャンルID、g_name: ジャンル名
def get_genre(df, g_list, g_level, g_id, g_name, max_level):
    
    # 関数内のリストにのみ反映させる
    temp_g = copy.deepcopy(g_list)

    # ジャンルID
    temp_g.extend([g_level, g_id, g_name])

    # 追加しようとするリストのサイズがDFの列サイズより小さいと警告が出るため、対処
    add_null = 0
    if len(df.columns) > len(temp_g):
        while len(df.columns) > len(temp_g):
            temp_g.append("")
            add_null += 1

    df = df.append([temp_g])

    # 列サイズの対処処理を実施していた場合、元の列数に戻す
    if add_null > 0:
        for i in range(add_null):
            temp_g.pop()

    # 現階層に対する子ジャンルが存在するかをチェックする
    item_parameters["genreId"] = g_id
    get_api = requests.get(base_url, params=item_parameters)
    temp_list = get_api.json()
    time.sleep(1) #楽天API規約に則って1secあける

    try:
        # 子ジャンルが存在する場合、階層を下げてジャンル情報を取得する
        child_genre_id = temp_list["children"]
        for j in child_genre_id:
            if j["genreLevel"]>max_level:
                break
            df = get_genre(df, temp_g, j["genreLevel"], j["genreId"], j["genreName"], max_level)
    except:
        pass
    return df


def main(max_level):

    # 最上位階層の取得
    r = requests.get(base_url, params=item_parameters)
    item_data = r.json()
    time.sleep(1) #楽天API規約に則って1secあける

    # 取得したジャンル情報を保持するデータフレームを用意
    df_g = pd.DataFrame()

    # 階層を掘ってジャンル情報を取得する
    for i in item_data["children"]:
        # 最上段ジャンル情報
        parent_g_level = i["genreLevel"]
        parent_g_id = i["genreId"]
        parent_g_name = i["genreName"]

        # 最上段ジャンルに紐づく、子ジャンル情報の取得
        g_list = []
        df_g = get_genre(df_g, g_list, parent_g_level, parent_g_id, parent_g_name, max_level)
        df_g.to_csv("List.csv", header=False, index=False,  encoding='utf_8_sig')
    return


if __name__ == "__main__":
    max_level = 2
    main(max_level)

まず、親ジャンルを調べて、84行目(ハイライトされた箇所)で指定した階層まで、どんどん探索していくコードになっています。ちなみに全階層調べようとすると、筆者の環境で数時間以上かかってしまいます。必要な箇所だけ深く探索したり、階層レベルを絞って検索してみてください。

応用編:ランキングとアフィリエイトURLを取得する

このジャンルIDを指定して、楽天商品のランキングとそのアフィリエイトURLを取得する方法もこちらで紹介しています。アフィリエイトで稼ぎたいブロガー必見となっていますので、ぜひ参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。