楽天APIを利用し、楽天市場のジャンル一覧を作成するプログラムをPythonで書きました。2017年にもジャンル一覧を作成しましたが、所々更新されているようなので、2019年版として改めてジャンル一覧を作成しました。見やすいように、親ジャンル、子ジャンルがツリー形式となるようにしてあります。
ソースコード
楽天APIから、ツリー形式のジャンル一覧を作成するPythonソースコードは下記の通りです。取得にかかる時間を計算するため、datetimeをインポートしています。(私の環境では、全部取得するのに、2時間58分35秒かかりました)
# -*- coding: utf-8 -*- import datetime import json import requests #楽天APIのURL genre_search_url = "https://app.rakuten.co.jp/services/api/IchibaGenre/Search/20140222?" #開始時間(後で取得にかかった時間を算出するため) starttime = datetime.datetime.today() def export_text(text1): fmt_name = "RakutenGenreTree.txt" with open(fmt_name, "a") as f: f.write("\n{0}".format(text1)) def get_child_list(genreid): record = [] #[[ジャンルID,ジャンル名],[ジャンルID,ジャンル名]・・・]という形で子ジャンルを保管するリスト record2 = [] #[ジャンルID,ジャンル名]を一時的に保管するリスト payload = { 'applicationId': 「あなたのIDを入力してください」, 'genreId': genreid, } try: #まれにエラーとなるため、念のためtryステートメントを付ける r = requests.get(genre_search_url, params=payload) res = r.json() for i in res["children"]: item = i["child"] record2.append(item["genreId"]) record2.append(item["genreName"]) record.append(record2) record2 = [] if record == []: return 0 else: return record except: print("API Error") return 0 def draw_tree(genre, space = " \t"): print(genre) child_list = get_child_list(genre[0]) if child_list == 0 or None: return for i in range(len(child_list)): if i != len(child_list)-1: export_text(space+"┣━"+str(child_list[i])) child_list2 = get_child_list(child_list[i][0]) if child_list2 == 0: continue else: draw_tree(child_list[i], space = space + "┃\t") else: export_text(space+u"┗━"+str(child_list[i])) draw_tree(child_list[i], space = space + "\t\t") return def main(): genre = ['0','root'] #"0"はrootを表す export_text(str(genre)) draw_tree(genre) endtime = datetime.datetime.today() s_time = endtime - starttime print("ジャンル取得にかかった時間は、 ",s_time," です") if __name__ == '__main__': main()
結果
取得結果は、1万行を超えるのでこちらからご確認ください。