コケッココケッコ

コケコッコー

python3:楽天カテゴリAPIを用いたカテゴリ一覧の取得

概要

pythonを用いてカテゴリ一覧をcsvで出力するスクリプトを探していると、 id:hatakazu さんがピンポイントのコードを公開されていた。

hatakazu.hatenablog.com

2012年の記事ということもあり、python3に対応していないこと、楽天APIが変更されていたため、最新版に書き下してみた。

コード

#-*- coding:utf-8 -*-
# Refer: http://hatakazu.hatenablog.com/entry/2012/07/06/203940
import urllib.request
import json
import time
import os

url="https://app.rakuten.co.jp/services/api/IchibaGenre/Search/20140222?applicationId=自身のアプリケーションIDに置き換える&genrePath=0&genreId=%s"

def main():
    fp=open(os.path.join(os.path.dirname(__file__),"genre.txt"),"w")
    topGenre=initGenreGet()
    mainGenreGet(fp, topGenre, "0")
    fp.close()

def initGenreGet():
    array=[]
    pyjson=json.loads(urllib.request.urlopen(url % "0").read().decode("utf_8","ignore"))
    for line in pyjson["children"]:
        array.append(line["child"])
    return array

def mainGenreGet(fp, array, parent_id):
    for line in array:
        fp.write("%s,%s,%s,%s\n" % (line["genreLevel"],line["genreId"],parent_id,line["genreName"]))
        fp.flush()
        genreArray=nextGenreGet(line)
        if len(genreArray):
            mainGenreGet(fp, genreArray, line["genreId"])

def nextGenreGet(code):
    pyjson=json.loads(urllib.request.urlopen(url % code["genreId"]).read().decode("utf_8","ignore"))
    time.sleep(1)
    return [obj["child"] for obj in pyjson["children"]]

if __name__ == '__main__':
    main()

感謝

id:hatakazu 氏に感謝を述べるとともに、スクリプトの終了までしばし待つ。