楽天ブックスのAPIを使ってのPHPプログラムです。
昨日、別のAPIを使う必要があると解り、今日、さっそく作りました。
(趣味でやっているプログラムなので、土日休みだと、2日続けてやれます。)
使ったのは「楽天ブックス総合検索API」
楽天ブックス総合検索API
こっちは、検索のキーワードが、楽天市場商品検索と同じ keyword になります。
また、昨日使った楽天ブックス書籍検索とは、出力データが違うので手を入れる必要がありました。
keyword に「PHP」を含む、ジャンルが「パソコン・システム開発」と思われる本は、80件が該当しました。それを、CSV形式でとりあえず画面に表示する、PHPのバッチ用スクリプトにしました。
まだ評価段階なので、Webページにはしてません。
作成したのは、次の3つ。
config.php : 楽天APIにアクセスするためのIDを格納するファイル
専用のクラスを記載したファイル
実行用のPHPファイル
まず、config.php は、楽天APIのサイトからダウンロードできるサンプルを同じしてます。
次に、クラス記述したファイルは、こんなのにしました。
Webサイトにデータを表示する処理は、まだ作ってません。これから追加するつもりです。
rwsclient = new RakutenRws_Client(); if(! $this->rwsclient ) { echo "RakutenRws_Client クラスの生成に失敗しました\n"; exit; } // アプリIDをセット Set Application ID $this->rwsclient->setApplicationId(RAKUTEN_APP_ID); // アフィリエイトIDをセット (任意) Set Affiliate ID (Optional) $this->rwsclient->setAffiliateId(RAKUTEN_APP_AFFILITE_ID); } function get_bookdata( $keyword, $page ) { if( $this->rwsclient === null ) { $this->initalize(); } try { $response = $this->rwsclient->execute( $this->rakuten_app, array( 'keyword' => $keyword, 'booksGenreId' => "001005005006", 'page' => $page, 'hits' => 30, 'sort' => 'sales' )); return( $response ); } catch(Exception $e) { echo "Client execute error :", $e->getMessage(), "\n"; exit; } } function data_store( $response ) { foreach( $response as $item ) { for( $i=0; $i < count($this->books_t); $i++ ) { $this->books_datas[$this->books_count][$this->books_t[$i]] = htmlspecialchars(mb_strimwidth($item[$this->books_t[$i]], 0, 80, '...', 'UTF-8')); // echo "Debug: ", $this->books_count, " : ", $i, " : ", $this->books_t[$i], " : ", $this->books_datas[$this->books_count][$this->books_t[$i]] , "\n"; } $this->books_count++; } } function data_dump() { echo "title,subTitle,author,publisherName,size,isbn,itemUrl\n"; for( $i=0; $i < count($this->books_datas); $i++ ) { for( $j=0; $j < count($this->books_t); $j++ ) { if( $j > 0 ) { echo ","; } echo $this->books_datas[$i][$this->books_t[$j]]; } echo "\n"; } } }
そして、テスト用のPHP実行用ファイル。
initalize(); $page_count = 1; for( $i=1; $i <= $page_count; $i++ ) { $response = $bs->get_bookdata( $keyword, $i ); if( $response && $response->isOK() ) { $bs->data_store( $response ); if( $page_count == 1 ) { $page_count = $response['pageCount']; } } } // 検索した結果を画面に表示します。 $bs->data_dump(); ?>
なにせ、1ページに30件、という制限があるので、すべて取り出すには、全ページにアクセスして、まとめて表示することになります。
結果を楽天ブックスの実際の画面と比べてみると、なんか違う。
なんで、違っているかは、まだ、確認できてません。まだ何かあるのかも。