はじめに
楽天ショップのカテゴリを取得した前回の
Pythonで楽天APIを使ったジャンル一覧リストの作成 に引き続き、
今回は取得したカテゴリを使って商品を取得してみた。
サイトの調査
前回取得したカテゴリをベースとした処理にしたため、特に参考にしたサイトはなし。
楽天APIの仕様で、各ジャンル同一条件での検索で最大3000件までしか取得できないらしい。
※検索結果のソート順を設定したら、もう少し取得できるかもしれない
前回ジャンルを取得した結果、階層が5つまでだったので、階層が5つである前提として
楽天ショップの各ジャンルの商品を取得する。
※階層が2つまでだったら、階層2のジャンルのアイテムを取得するようにした
■前回取得したジャンルリスト
GenreID:1 | GenreName:1 | ・・・ | GenreID:5 | GenreName:5 |
---|---|---|---|---|
510915 | ビール・洋酒 | ・・・ | 567652 | ノンアルコール |
取得するだけだったら、わざわざ書かなくても良い気がしたけど、
エラーとかあって、数十分、数時間後に止まっていることがあったので
一応、メモとして記載
どういうことかというと、
やったこと
APIをたたく際のパラメータにページ設定があり、これが1~100までの
範囲で設定ができ、各ページごとに30アイテムを取得することが出来る
※すべてのジャンルに3000アイテムあるわけではない為、数百件しかないジャンルも存在した。
約17000件のジャンルに対して、1ジャンル最大100回APIを実行し商品情報を取得した。
# 検索用パラメータにページNoを反映
item_param["page"] = ***ページ番号***
処理を走らせておくと、数時間に一回APIのエラーが返ってくることがあった為、
処理失敗時に再度APIを実行するようにエラー時には以下のループ機能を実装した。
処理に失敗した場合は、『数秒空けて、再度同条件でAPIを実行する』を成功するまで
ひたすら繰り返す。
ただし、それでも、エラーになり終了していることがあった
※調べたところ、ConnectionResetError が発生していた模様
また、商品数が3000件ないジャンルの時は、100ページ分APIをたたくのは時間の無駄になるため、
エラーではなく、取得結果0件の時は途中でアイテムの取得をやめるようにした。
まとめ
時間はかかるものの、楽天APIを使って工夫することで
各ジャンル最大3000件のアイテムを取得することが出来る
以上、楽天API使ったアイテムの取得メモ