楽天ブックスのAPIを使う(その2)

楽天ブックスの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件、という制限があるので、すべて取り出すには、全ページにアクセスして、まとめて表示することになります。

結果を楽天ブックスの実際の画面と比べてみると、なんか違う。
なんで、違っているかは、まだ、確認できてません。まだ何かあるのかも。