【楽天ブックスAPI】ジャンルID一覧・Pythonでの調べ方

この記事で解決するお悩み
  • 楽天ブックスのジャンルIDが知りたい
  • Pythonで楽天ブックスのジャンルIDを自分で調べてみたい

本記事では、「楽天ブックス」のジャンルID一覧と、Pythonでの調べ方を徹底解説していきます。
楽天ブックスのジャンルIDとは、楽天ブックス系のAPIを使って、ジャンルを絞った検索をする際に必要になってくるIDのことです。これを使えば、ジャンルごとの売れ筋商品やその商品情報を抽出できるようになります。

今回は、Pythonでの楽天ブックスジャンルIDの調べ方も載せてあるので、自分で、「より深い階層のジャンルIDを調べたい」や「最新のジャンルIDを調べたい」という方、必見の内容となっております。

楽天ブックスジャンルID一覧(レベル2まで)

早速ですが、ジャンルID一覧です。レベル2の階層まで表示してあります。ジャンルIDと書かれた列の番号を、楽天ブックス系のAPI内の「booksGenreId」に入力してください。

Pythonでの調べ方

Pythonで自動的に階層を掘り下げて、楽天ブックスジャンルIDを抽出するコードはこちらです。11行目(ハイライトされた箇所)のアプリIDを適宜、自分のIDに変えてください。

アプリIDの登録がまだの方(アプリケーションIDをまだお持ちでない方)は、こちらで楽天APIについての総まとめ、アプリID登録の仕方を紹介しているのでぜひ参考にしてみてください。

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


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

#ジャンル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["booksGenreId"] = 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["booksGenreId"], j["booksGenreName"], 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["booksGenreId"]
        parent_g_name = i["booksGenreName"]

        # 最上段ジャンルに紐づく、子ジャンル情報の取得
        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_Books.txt", header=False, index=False, encoding='utf-8')
    return


if __name__ == "__main__":
    max_level = 2 #探索階層レベル
    main(max_level)

まず、親となるジャンルを調べて、子、孫、と階層を掘り下げてジャンルIDを探索していくプログラムとなっております。84行目(ハイライトされた箇所)の探索階層レベルを増やしていくと、より細かいジャンルのIDが取得できます。(より深い階層の探索は時間かかるので注意)

まとめ

楽天ブックス系APIの使い方はこちらで徹底解説しています。ここで調べた楽天ブックスのジャンルIDを使って、ジャンル別の検索をかけてみましょう。

コメントを残す

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