人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です。

楽天APIのコードを、同じページで2回使いたいと思うのですが、2回目だとページが真っ白になってしまいます。

例えば、「サイドバーではカバンを5つ表示させる(この場合、コードは1つ)」だと普通に表示できるのですが、
「サイドバーにカバンを5つと、フッターに靴を5足(この場合、コードは2つ)」と、
同じコードを使い、キーワードだけ違うものを入力すると、上手く表示されません。

複数同じコードを違い、キーワードだけ変えて出力して表示したい場合の
処理というのは、どうすれば良いのでしょうか?

●質問者: うんこ
●カテゴリ:ウェブ制作
✍キーワード:API PHP カバン キーワード コード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y-kawaz
●150ポイント ベストアンサー

プログラムのコードがどうなってるか分からないので大雑把なアドバイスになりますが…。

楽天WEBサービスAPIのコトですよね多分。

一番ありそうなのは単純にプログラムのバグですが、次によくあるのは楽天APIの実行頻度制限に引っかかっていることです。

楽天WEBサービスの各APIは1秒間に1回の呼び出ししか出来ません。この頻度を超える間隔でアクセスするとエラー扱いでデータは返って来ないようになってます。

多少は1秒1回を超えてもアクセスできると思いますが、慢性的に制限を越えるようですとデベロッパーIDの停止もあります。

特にここ1年くらいで運用が厳しくなっているようで気を付けないとすぐに止められてしまうようです。

http://webservice.faq.rakuten.co.jp/app/answers/detail/a_id/1426...


まずは1ページの中に2回楽天APIを呼んでいる箇所があるとすると思うので試しに、その呼び出しコードの間に sleep(1); とかを挟んでみたら変化が無いでしょうか?

それで表示されるようになるようであれば呼び出し制限の可能性が高いです。


また、1ページ内でsleep(1)とかを挟んで1秒1回以下に抑えたとしても、複数ユーザが同時にアクセスしてくるることも考えると、それだけでは対策が足りないことになります。

根本的な対策としてはプログラム側でキャッシュを利用して、またロック処理をって1秒に1回以上の呼び出しが発生しないようにするなどの工夫をする必要があります。

◎質問者からの返答

ご回答ありがとうございます。

コード自体は、「公開API活用ガイド」のサンプルをそのまま使用していて以下のものになります。

http://www.kohgakusha.co.jp/books/detail/978-4-7775-1536-3

初心者で申し訳ないのですが、sleep(1); をどこに入れたら良いのか分からないので、

教えていただけると幸いです。

もしくは、プログラムのバグの指摘(こうすれば、同じコードを2回使用できる)などでも助かります><。



<?php

//楽天から商品を検索してHTMLタグを返す関数
function search_rakuten($keyword,$limit){

 //developerIdを設定する
 $developerId = '取得したデベロッパーID';

 //affiliateIdを設定する
 $affiliateId = '取得したアフィリエイトID';

 //使用するAPIの操作名を設定する
 $operation = 'ItemSearch';

 //バージョンを設定する
 $version = '2009-04-15';

 //取得件数を設定する
 $hits = $limit;

 //検索キーワードをURLエンコードして設定する
 $text = urlencode($keyword);

 //人気の高い順に検索する
 $sort = urlencode("standard");

 //URLを生成する
 $url = 'http://api.rakuten.co.jp/rws/3.0/rest?'.
 'developerId='.$developerId.
 '&affiliateId='.$affiliateId.
 '&operation='.$operation.
 '&version='.$version.
 '&keyword='.$text.
 '&hits='.$hits.
 '&sort='.$sort;

 //RESTで返されるXMLファイルを取得する
 $str = file_get_contents($url);

 //XMLを解析してオブジェクトにセットする
 $xml = simplexml_load_string($str);

 //xpathによって、Item要素だけを取り出す
 $Items = $xml->xpath('//Items/Item');

 //divタグでくくる
 $ret = '<div id="rakuten_item">';

 //Item数だけ繰り返す
 foreach($Items as $Item){
 $ret .= '<a href="'.$Item->affiliateUrl.'">';
 $ret .= '<img src="'.$Item->mediumImageUrl.'" alt="'.$Item->itemName.'">';
 $ret .= "</a>\n";
 }

 //divタグを閉じる
 $ret .= '</div>';

 //作成したHTMLを返す
 return $ret;
}

//検索ワードを設定する
$keyword = "スイーツ";

//取得数を設定する
$limit = 5;

//楽天から商品を検索して表示する
echo search_rakuten($keyword,$limit);

?>
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ