楽天APIより商品を取得する際にジャンルIDを指定することができます。
ジャンルIDを指定して商品を取得した場合、孫ジャンルやひ孫ジャンルの商品までは取得していないようでしたので、末端のジャンルを指定して正確に大量の商品データを取得しようと試してみました。
楽天Webサービスにはジャンルを取得する専用のAPIである楽天ジャンル検索API2というものがあるので、これを使って「子要素を持っていないジャンル」のみを取得します。
あまり使ったことがないのですが、今回再帰の処理を使いました。
基準となるジャンルIDを指定→その子ジャンルを取得→子ジャンルが取得できなければそのジャンルのIDと名称を出力する
という流れです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php require_once 'autoload.php'; //楽天APISDKのロード(設置場所によってはパスの変更が必要です) //funcというfunctionを再帰で呼び出す function func($id){ $client = new RakutenRws_Client(); $client->setApplicationId('DEVELOPER_ID'); $response = $client->execute('IchibaGenreSearch', array( 'genreId' => $id, 'genrePath' => 0, )); if ($response->isOk()) { if($response['children']){ //子要素の有無を判定 foreach ($response['children'] as $childGenre) { $id = $childGenre['child']; func($id["genreId"]); //子要素があればその子要素に対して再度func()を実行 } } else { //子要素がないカテゴリはIDと名称をカンマで区切って出力する $cr = $response['current']; echo $cr['genreId']; echo ','; echo $cr['genreName']; echo '<br />'; } } } $all = array('000000'); //親カテゴリをカンマ区切りで設置すると複数カテゴリの末端カテゴリをまとめて取得できます。 foreach($all as $val){ func($val); } ?> |
商品取得ほどではないですが時間がかかり重い処理となりますので、サーバへの負荷は結構あります。DBへの書き込みなどを行う処理ではないので、ローカルで行ったほうが使いやすいかもしれません。
ADs
コメントはまだありません。