エンジニアリングとお金の話

都内で働くエンジニアの日記です。

【技術】楽天の全てのジャンルを取得してみた

【SPONSORED LINK】

楽天市場でよく買い物を行っているが、商品が豊富で本当に迷う。いったいどれくらいのジャンルの商品があるのかなと、ふと気になったので調べてみる事にした。

調査の方法としては、楽天の提供している「楽天ジャンル検索API」を使用し全てのジャンルを取得するプログラムを組んで調べる事にした。
f:id:hatakazu93:20120706075653j:plain

再帰処理を使用し、親ジャンルを基に子ジャンルを全て取得する様にプログラムを組んだ。なお、楽天のAPIは1秒間に1アクセスしか許可していない事に気付かず1時間程ハマッてしまった。。

#-*- coding:utf-8 -*-
import urllib
import json
import time
import os

url="http://api.rakuten.co.jp/rws/3.0/json?developerId=bb6b52db076f29f8631dd3755dd1fbd0&operation=GenreSearch&version=2007-04-11&genrePath=0&genreId=%s"
fp=open(os.path.join(os.path.dirname(__file__),"genre.txt"),"w")

def main():
    topGenre=initGenreGet()
    mainGenreGet(topGenre)

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

def mainGenreGet(array):
    for line in array:
        print >>fp,"%s,%s,%s" % (line["genreLevel"],line["genreId"],line["genreName"].encode("utf_8","ignore"))
        genreArray=nextGenreGet(line)
        if len(genreArray):
            mainGenreGet(genreArray)

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

if __name__ == '__main__':
    main()

【取得結果】
f:id:hatakazu93:20120706203837j:plain

ジャンルの取得結果だが、全部で49,018ジャンルある事が分かった。1000ジャンルぐらいだろうと思っていた為、正直予想外であった。ちなみに、朝の六時ぐらいから処理を実施し終わったのが夜の8時。やっぱ、一秒間に1回しかアクセス出来ないのは痛いな。。楽天のジャンル一覧を取得出来たので、この情報を基に商品のランキング等を作成していきたい。