案ずるより産むが易し 意外と簡単 楽天ウェブサービスを使ってみる(5)

ウェブサービスを使ってみる

案ずるより産むが易し 意外と簡単 楽天ウェブサービスを使ってみる(1)~(4)」では「 楽天Kobo電子書籍検索API 」を題材にして、その利用方法を説明しました。その時のリクエストフォーマットは「xml」でしたが、「json」の場合はどうなるのかというのが今回のテーマです。

XMLは「Extensible Markup Language」、JSONは「JavaScript Object Notation」の略で、どちらもWeb上でデータのやり取りを行う際のデータフォーマットです。最近はXML形式よりもJSON形式が用いられることが多いそうです。XML形式はデータをタグで囲む記述方式のためデータが大きくなりやすく、それが全体のパフォーマンス低下につながるということもその理由にあるようです。

「 楽天Kobo電子書籍検索API 」のデータをJSON形式で受け取るためには、リクエストで「xml」を「json」に変更します。受け取ったデータは json_decode()関数で配列に変換して、データ処理をします。

<?php

// -----------------------------------------------------------------------------------
// 配列を使って、基本的なリクエストを作成します
// ----------------------------------------------------------------------------------- 
	$_BASEURL ='https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426'; // 楽天Kobo電子書籍検索クエストURL
	$_PARAMS  = array();		// パラメータ用配列

	$_PARAMS['applicationId']  = '1234567890123456789';		// あなたのアプリID
	$_PARAMS['affiliateId']    = '0123abcdef567890ghijklmn009';	// あなたのアフィリエイトID
	$_PARAMS['format']         = "json";    // ←ここをjson にする
	$_PARAMS['keyword']        = "ストライク・ザ・ブラッド"; // キーワードを入力します
	$_PARAMS['koboGenreId']  = "";		    // ジャンルを指定する場合はそのIDを入力します
	$_PARAMS['hits']		 = 12;			// 1ページあたりの取得件数 1から30までの整数 
	$_PARAMS['page']		 = 2;			// 取得ページ 1から100までの整数
  ・
  ・
  ・

	$_PARAMS = array_filter($_PARAMS, "strlen"); //配列の中の空要素を削除します
	$canonical_string = ''; // canonical string を作成します
	foreach ($_PARAMS as $k => $v) {
		    $canonical_string .= '&'.$k.'='.$v;
	}
	$canonical_string = substr($canonical_string, 1);	// 最初の文字'&'を除きます

	$_REQ_URL = $_BASEURL.'?'.$canonical_string;	// BASEURLにパラメータを付加してリクエストを生成します
  ・
  ・
  ・

取得したデータを配列に変換して表示します。

// -----------------------------------------------------------------------------------
// APIクエストして、データを確認します
// ----------------------------------------------------------------------------------- 
  $_BookData = @file_get_contents ($_REQ_URL ); 	//APIリクエストする
  $_DATA     = 	json_decode($_BookData, true);		//jsonデータを配列データに変換
  ・
  ・
  ・
  foreach($_DATA['Items']  as $Hit){	//foreachで値を順次取り出して処理します
    $_ITEM_TITLE	    =	$Hit['Item']['title'];		// 書籍タイトル
    $_ITEM_TITLE_KANA	=	$Hit['Item']['titleKana'];	// 書籍タイトル カナ
    $_ITEM_SUB_TITLE	=	$Hit['Item']['subTitle'];	// 書籍サブタイトル
    $_ITEM_SERIES_NAME	=	$Hit['Item']['seriesName'];	// 本のシリーズ名

    $_ITEM_AUTHOR	    =	$Hit['Item']['author'];		// 著者名
    $_ITEM_AUTHOR_KANA	=	$Hit['Item']['authorKana'];	// 著者名カナ
    $_ITEM_PUBLISHER_NAME  =	$Hit['Item']['publisherName'];	// 出版社名
    $_ITEM_NUMBER	       =	$Hit['Item']['itemNumber'];	// 商品番号
    $_ITEM_CAPTION	=	$Hit['Item']['itemCaption'];		// 商品説明文

    $_ITEM_SALLE_DATE	=	$Hit['Item']['salesDate'];		// 発売日
    $_ITEM_PRICE	=	$Hit['Item']['itemPrice'];		// 税込み販売価格
  ・
  ・
  ・