初歩的なことかもしれませんが、Wordpressの記事内で、
<?php
$keyword = "はてな";
$limit = 3;
echo search_rakuten($keyword,$limit);
?>
のように、商品画像を取得する際、このコードの下に別のコード(例:キーワードの中だけを変えたり)を使って、
別の楽天商品を表示させようとすると、
ページ全体がエラーのようになってしまいます。
これは何がいけないのでしょうか?
楽天APIの連続利用は許されておらず、1秒間に1回までとなっていますので、
下記のように次の検索は1秒待った後に行うように工夫しておかなければ、
2回目のほうでエラーとなってしまいます
<?php $keyword = "はてな"; $limit = 3; echo search_rakuten($keyword,$limit); sleep(1); $keyword = "ダイアリー"; $limit = 3; echo search_rakuten($keyword,$limit); ?>
楽天APIの連続利用は許されておらず、1秒間に1回までとなっていますので、
下記のように次の検索は1秒待った後に行うように工夫しておかなければ、
2回目のほうでエラーとなってしまいます
<?php $keyword = "はてな"; $limit = 3; echo search_rakuten($keyword,$limit); sleep(1); $keyword = "ダイアリー"; $limit = 3; echo search_rakuten($keyword,$limit); ?>
回答ありがとうございます!
1秒待ったあとの処理ということは、例えば同じ記事内で10つ違うコードを使いたいときだと、
最終的にsleep(1)がたくさんになってしまって、記事を表示するのにとても時間が掛かりますよね。
つまり、何度も記事の中で使うような手法は、本来向いていないということなのでしょうか?
下記が使用の一例です。
---------------------------------
<?php $keyword = "はてな"; $limit = 3; echo search_rakuten($keyword,$limit); ?> 文章が100字ほど <?php sleep(1); $keyword = "ダイアリー"; $limit = 3; echo search_rakuten($keyword,$limit); ?> 文章が100字ほど <?php sleep(1); $keyword = "人力検索はてな"; $limit = 3; echo search_rakuten($keyword,$limit); ?> ・・・中略・・・ <?php sleep(1); $keyword = "はいく"; $limit = 3; echo search_rakuten($keyword,$limit); ?>
---------------------------------------------
コメントにて追加情報をいただきありがとうございます。
APIバージョンが古いのではないでしょうか?
$version = '2010-09-15';
でお試しください。
また、APIエラーなら、出力中の「共通パラメーター」のStatusにエラーが帰ってきますので、この値を表示・確認をお願いします。
アドバイスありがとうございます!
早速バージョンを変えてみました。
とりあえず、エラーの件は最初の回答の方のが原因だったようで、改善しました!
search_rakutenというのは自作の関数なのでしょうか?
楽天のAPIは1秒に1回ですが、今回はこれでエラーになってるとは考えられないです。
PEARの Services_Rakutenを改造して同様のことを行ってますが問題なく表示されます。
search_rakutenが自作の関数なら、その中身の検証をした方が良いでしょう。
また、エラーになるということですが、なんのエラーかどうかを地道に調べるべきだと思います。
php.iniで、エラーレベルを変更し、またエラーログを出力するように設定すれば
現状でも何かのエラーが出てくると思います。
http://pc.casey.jp/archives/2174
また、楽天APIから返されるリターンコードも見ることをお勧めします。
上記のように1秒のSLEEPを入れて動作するのでしたら、1リクエスト1秒の制限です。
http://webservice.rakuten.co.jp/faq/
ここの後半にも書かれているように、通常このようなことを行う場合はデータをキャッシュして対応します。
Amazonでも同じようなことができます。やっているところはデータキャッシュを持つようにしてリクエスト数を
減らしてます。
アドバイスありがとうございます!
エラーの件は、最初の方のコメントで無事解決しました。
…とは言え、今後の勉強の参考になる助言感謝です!
回答ありがとうございます!
1秒待ったあとの処理ということは、例えば同じ記事内で10つ違うコードを使いたいときだと、
最終的にsleep(1)がたくさんになってしまって、記事を表示するのにとても時間が掛かりますよね。
つまり、何度も記事の中で使うような手法は、本来向いていないということなのでしょうか?
下記が使用の一例です。
---------------------------------
---------------------------------------------