MB-Support

パソコン初心者のサポートページ

楽天商品検索API を3年ぶりにいじってみた


当サイトの一部のページに、楽天市場のWEBサービスの一つである「楽天商品検索API」を利用した商品リンクを掲載しています。他に、AmazonやバリューコマースのWEBサービスも使っていますが、これらのサービスは外部サイトの情報を利用するため、レスポンスが悪くなる場合もあります。当サイトでは、WEBサービスを利用したプログラムでエラーが発生した内容と回数を知ることができますが(そのように作っている)、サービス提供元のエラーが無い限り、日に10件から20件のエラーが発生していました。



システムを見直すべく、楽天市場の最新のAPIを確認したところ、2013年8月5日に新しいバージョンが登場していました。そして、自分のシステムが利用しているバージョンを確認すると、2010年9月15日になっていました。つまり、約3年間バージョンアップを怠っていました。せっかく見つけたので、2013年8月5日に公開された最新バージョンに移行することにした次第です。



当サイトではバージョン情報を入力したPHPファイルを作成して、それを利用するファイルに include_once で読み込んでいます。通常であれば、新しいバージョン情報、URLが変更されているならば、そのアドレスを追加するだけで済みますが、3年も経つと根本的に変更されてしまったようです。



当サイトでは、RESTを使ってXMLファイルを取得しています。3年前に使っていたアドレスの形式は以下です。

http://api.rakuten.co.jp/rws/3.0/rest?developerId=[YOUR_developerID]&affiliateId=[アフィリエイトID(affiliateId)]&operation=ItemSearch&version=2010-09-15&keyword=検索ワード

これが、新しいversion:2013-08-05では、https に変更されアドレスも異なっていました。さらにJoinがデフォルトで、XMLで取得するにはパラメータ[forma]で[xml]を指定するようです。

https://app.rakuten.co.jp/services/api/IchibaItem/Search/[APIバージョン]?applicationId=[アプリID/デベロッパーID(applicationId / developerId)]&affiliateId=[アフィリエイトID(affiliateId)] &format=xml&keyword=検索ワード

どこまで変更する必要があるのか、この時点では不明でしたが、最初が変更されているので、腰を据えて作業に取り組む必要がありそうです。旧APIで使っていたデベロッパーID(applicationId)は、アプリID(developerId)に名称が変更されていました。また、バージョンの指定方法が変更されています。旧APIではパラメータ[version]で指定していましたが、新APIでは[?]の前に埋め込まれています。include_once で従来通り制御するため、以下のように変更しました。



master.php

$API_URL = "https://app.rakuten.co.jp/services/api/IchibaItem/Search/";
$API_version = "20130805";
//アプリID/デベロッパーID(applicationId / developerId)
$developerId = "アプリID/デベロッパーIDを入力";
//アフィリエイトID(affiliateId)
$affiliateId = "アフィリエイトIDを入力";


HTMLを生成

include_once('master.php'); //設定情報の読み込み
//RESTアドレスの生成
$REST_URL = "{$API_URL}{$API_version}
?applicationId={$developerId}
&affiliateId={$affiliateId}
&format=xml・・・・


上記のように、XMLを呼び出すアドレスを生成して、取得したXMLをfile_get_contentsで読み込みます。しかし、http から https に変更されたためか、次のエラーが発生しました。

PHP Warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? on line 2229


そこで、php.iniを開き、extension=php_openssl.dll の先頭の「;(セミコロン)」を外して上書き保存します(エクステンション[openssl]を有効にする)。IIS を再起動したのちに読み込むことはできましたが、XMLの内容が変更されているため、関連するプログラムを修正する必要がありました。



まず、Status でエラーをチェックしていたので、これに関するプログラムを削除しました。各アイテムを指定するには、Response -> Body -> itemSearch:ItemSearch -> Items -> Item でしたが、これが root -> Itens -> Item に変更されました。XML文字列をオブジェクトに代入する simplexml_load_string を使って、各アイテムの情報を取り出すには以下のようにします。

$APIBuff = file_get_contents("$REST_URL");
$xml = simplexml_load_string($APIBuff);

//検索結果の総商品数を取得するには
$count = $xml->count;

//各アイテムを取得するには
foreach ($xml->Items->Item as $Item) {
 //アフィリエイトURLを取得
 $affiliateUrl = $Item->affiliateUrl;
 //アイテムネームを取得
 $itemName = $Item->itemName;
 $text .= "<h2><a href="{$affiliateUrl}" target="_blank">{$itemName}</a></h2><br />";
 unset($affiliateUrl,$itemName);
}
print ("$text ");

3年前に作ったもので、思い出すまでに時間が掛かりましたが、新しいAPIでも商品一覧を表示することができました(左下)。レスポンスが良くなっていると思います。右下は、実際に当サイトに埋め込まれた商品リンクです。RESTでXMLを取得して、左下のHTMLファイルをPHPで作成します。それを jQuery で各ページに読み込んでおり、本体のページとは別に、ページ送りや表示方法を変更できます。もちろん正規のルールに則りキャッシュを利用しています。


XMLからHTMLを作成 各ページにjQueryで表示

以下は実際にWEBサービスを利用した表示です。「>」「<」ボタンでページを送ったり、「↓」「↑」ボタンで展開したり縮小したりできます。


画像の有無がパラメーター[imageFlag]で分かるようになりました(0:商品画像無し / 1:商品画像有り)。しかし、[imageFlag]だけで動作を振り分けることは難しいと思います。商品画像には、最大3枚の画像(画像サイズ64px*64px)をimageUrl の配列で返却するパラメーター[smallImageUrls]と、最大3枚の画像(画像サイズ128px*128px)を imageUrl の配列で返却するパラメーター[mediumImageUrls]があります。

//画像を取得
$ii = 0;
foreach ($Item-> smallImageUrls as $smallImageUrls) {
 $smallImageUrls [$ii] = $smallImageUrls ->imageUrl;
 $ii++;
}
unset($ii);
//画像があるならば
if ($smallImageUrls[0] != "") print ("<img src=\"{$smallImageUrls[0]}\" border=\"0\" />");
else {
//画像はありません。
}


画像のアドレスを配列に格納して、画像の有無を調べても、やはり動作を振り分けるのは困難です。XMLでは確かに画像アドレスを取得できますが、中にはアクセスすると以下のアドレスに飛ばされるものもあります。このアドレスは、1px × 1pxの画像が表示され、つまり商品画像が表示されません。画像が無いなら情報で示してくれないと対応できません。

http://thumbnail.image.rakuten.co.jp/t.gif

[mediumImageUrls]、[smallImageUrls]の最大枚数は3枚 × 2 = 6枚 です。左下の[mediumImageUrls]に3つの[imageUrl]があり、それが右下のスクリーンショットの上段の画像です。[smallImageUrls]に3つの[imageUrl]があり、それが右下のスクリーンショットの下段の画像です。いずれも最初の画像アドレスが商品画像としては妥当です。

楽天商品検索API





BTOパソコン・ゲームPC・自作パソコンなら【TSUKUMO】 - 自作PCに必要なパーツ、豊富な品揃え

Copyright © 2013 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人サイト閲覧方法プライバシーポリシー著作権/免責事項