Loading....
最近の投稿:

Article

楽天APIで制限された場合のメッセージを表示する

アクセスログを見ていると、
前回の楽天APIの実行制限には
みなさん興味があるようですので、
今回は前回よりもう一歩踏み込んだ
改造方法をご紹介します。

前回は一部サーバー(PHPのエラーメッセージを
web画面に表示する様になっているサーバー)で
デベロッパーIDを含むワーニングが表示されていたのを
表示させないように改造しました。

しかしこれだけでは、ワーニング発生時に
やはり商品が表示されないままで、
ユーザー(閲覧者)に対して優しく無いです。

そこで今回の改造では、ワーニング時に
適当なメッセージを表示する様にしたいと思います。

この改造を行うと、楽天APIの叩き過ぎで
商品情報を得られなかった場合には、
ただいまアクセスが集中している為、商品情報を取得できませんでした。
大変申し訳ございませんが、しばらく経ってからやり直して下さい。

と表示されるようになります。

それ以外のエラー時(例えば検索に
マッチする商品が無い等)は、
オリジナルのアラジン同様、
の商品情報を取得できませんでした。
キーワードを変更して検索し直してください。

と表示されます。

それぞれ下記ページに対応するファイルに
前述の文言がありますので、みなさん
ご自由な文言に書き換えてお使い下さい。

  • トップページ
  • カテゴリーページ
  • サブカテゴリーページ
  • 商品詳細ページ
  • 検索結果ページ

もし、エラーメッセージをもっと細かくしたいという場合は
その旨、コメントなりメールなりでご連絡下さい。
状況に応じて回答致します。

今回の改造は前記事の改造後を前提としていますので、
前回の改造をしていない方は、
今回の改造を行う前に前回の改造を行って下さい。
今回は、とても改造量が多いですので、
注意して改造して下さい。

では、修正コードです。

楽天API用ライブラリの修正

lib\rakutenAPI.phpに対する修正

行番号 : 36
const NG = 1;
この行の直後に下記コードを追加します。
  const DENIED = 2;  // 楽天APIからアクセス拒否
行番号 : 53,90,131(上から順番に修正した場合の行番号です。)
(上記修正前はそれぞれ52,85,122行目。検索した方が確実です。)
return self::NG;
この行を下記コードに置き換えます。
      if( $xml->Header->Status == '' ){
        return self::DENIED;
      } else {
        return self::NG;
      }

トップページの修正

index\contents.phpに対する修正

行番号 : 3
foreach($mainCategory as $m){
この行を下記コードに置き換えます。
$pa=array();
foreach($mainCategory as $k=>$m){
行番号 : 14(上記修正前は13行目)
echo<<<TO_END
この行の直前に下記コードを追加します。
if($ret == rakutenAPI::OK){
  $pa[$k] = $p->category ;
} else {
  break ;
}
}

if($ret == rakutenAPI::OK){

foreach($mainCategory as $m){
行番号 : 32
(上記修正前は21行目)
foreach($p->category as $c){
この行を下記コードに置き換えます。
foreach($pa[$j] as $c){
行番号 : 64(上記修正前は52行目)
$j++;
この行の直後に下記コードを追加します。
}
} elseif($ret == rakutenAPI::DENIED){
echo<<<TO_END
<p style="text-align:center;">ただいまアクセスが集中している為、商品情報を取得できませんでした。</p>
<p style="text-align:center";>
大変申し訳ございませんが、しばらく経ってからやり直して下さい。
</p>
TO_END;
} else {
echo<<<TO_END
<p style="text-align:center";>商品情報を取得できませんでした。</p>
TO_END;

カテゴリーページの修正

category\contents.phpに対する修正

行番号 : 17
require './src/result.php';
この行の直後に下記コードを追加します。
} elseif($ret == rakutenAPI::DENIED){
echo<<<TO_END
<h2 style="text-align:center;">ただいまアクセスが集中している為、商品情報を取得できませんでした。</h2>
<p style="text-align:center";>
大変申し訳ございませんが、しばらく経ってからやり直して下さい。
</p>
TO_END;

サブカテゴリーページの修正

subcategory\contents.phpに対する修正

行番号 : 14
require './src/result.php';
この行の直後に下記コードを追加します。
} elseif($ret == rakutenAPI::DENIED){
echo<<<TO_END
<h2 style="text-align:center;">ただいまアクセスが集中している為、商品情報を取得できませんでした。</h2>
<p style="text-align:center";>
大変申し訳ございませんが、しばらく経ってからやり直して下さい。
</p>
TO_END;

商品詳細ページの修正

itemdetail\src\product.phpに対する修正

行番号 : 2
if( $ret != rakutenAPI::NG){
この行を下記コードに置き換えます。
if( $ret == rakutenAPI::OK){
行番号 : 36
require './src/result.php';
この行の直後に下記コードを追加します。
} elseif($ret == rakutenAPI::DENIED){
echo<<<TO_END
<h2 style="text-align:center;">ただいまアクセスが集中している為、商品情報を取得できませんでした。</h2>
<p style="text-align:center";>
大変申し訳ございませんが、しばらく経ってからやり直して下さい。
</p>
TO_END;

検索結果ページの修正

isearch\contents.phpに対する修正

行番号 : 14
require './src/result.php';
この行の直後に下記コードを追加します。
} elseif($ret == rakutenAPI::DENIED){
echo<<<TO_END
<h2 style="text-align:center;">ただいまアクセスが集中している為、商品情報を取得できませんでした。</h2>
<p style="text-align:center";>
大変申し訳ございませんが、しばらく経ってからやり直して下さい。
</p>
TO_END;

人気ブログランキングへ
人気ブログランキングへ参加しています。
明日への励みになりますので、応援をお願いします。


Comments (7 comments)

お世話になります、なはちんです。
この改造を行ったのですが、トップページを表示させてみると、以下のようなエラーが出ます。

Warning: Invalid argument supplied for foreach() in /***/index/contents.php on line 37

foreach($pa[$j] as $c){

の行なのですが、何か間違っているでしょうか…
確認事項があればよろしくお願いいたします。

なはちん / 4 月 18th, 2009, 00:15

なはちんです。
連続ですみません。

URLを記述しておきますね。

http://fashion-ladies.handz-up.net/

この話とは関係ないのかと思いますが、
見ておわかりの通り、スタイルシート /css/style.css が読み込まれていません。
style.css 自体は変更を行っていますが、
読み込むところのLINKタグは変えていません。

どうかアドバイスいただけたらと思います。

なはちん / 4 月 18th, 2009, 00:27

なはちん さん、こんにちは。
これは、「foreachでループ処理を行おうとしている変数が配列じゃないよ。」というワーニングですので、$pa[$j]が配列なっていないのが原因です。
ですので、その前処理で行っている、「$pa[$k] = $p->category ;」の部分が正しいかどうか、
また同時に、$pa[$k]に値を挿入する為の直前の分岐処理である、「if($ret == rakutenAPI::OK){」が正しいか、
そして、$ret に値を渡す、lib\rakutenAPI.php の修正が正しいかどうかご確認下さい。

その辺を見ても問題が無いようであれば、下記ファイルを私宛にメールで送ってもらえますか。
みてあげますよ。
 ■送信するファイル
  index\contents.php
  lib\rakutenAPI.php
 ■メールアドレス
  chikamao@u3g.biz

チカマオ / 4 月 18th, 2009, 08:55

なはちん さん、こんにちは。
サイトをみました。
現状は先程のphpのwarningが出ているので、スタイルシートが適用されていないのはそのせいだと思います。
warning等によりhtmlの構造が崩れてしまうとスタイルシートを適用できなくなるのは良くある事です。

warningを解決したあとも出ているようであれば、再度ご連絡下さい。
頑張って下さい。
PS. 私も同じようなカテゴリーでサイト作ろうとしたけど、女性用ファッションのサブカテゴリーの分類が判らず断念してしまいました。(^^ゞ  
  なるほど、この様に分類すると良いのですね。勉強になりました。
  でも、これだときっとサブカテゴリー単位でのジャンル指定もしないと厳しいですよね。近い内にその方法もご紹介しますね。

チカマオ / 4 月 18th, 2009, 09:05

なはちんです。
先ほどメールを送りましたので、よろしくお願いいたします。

PS.
私のカテゴリの分類は、楽天のそれを真似したものです。
検索が、カテゴリ以下から、とか、サブカテゴリ以下からにならないかな~と思ってます。
スーツを検索するのに、いちいちレディースとか入れなきゃいけないのが、お客さんに優しくないと思って…

なはちん / 4 月 18th, 2009, 10:40

なはちんです。
スタイルシートが読み込まれなかった件については、
style.cssのなかの記述が間違っていた場所があって、
反映されていませんでした。
お騒がせしました。

引き続き、エラーが出る件、よろしくお願いいたします。

なはちん / 4 月 18th, 2009, 13:35

なはちん さん、こんにちは。
メールでも御返事していたので、コメントへの返事を忘れていました。

スタイルシートの件、解決して良かったです。 \(^o^)/

アラジンの(サブ)カテゴリーに対して、楽天のジャンル指定を行う改造を公開していますので、宜しければご覧ください。
ジャンル指定を追加しよう

チカマオ / 4 月 22nd, 2009, 10:23

What do you think?

判らないphp命令やhtmlタグ等をここでお調べ下さい。

カスタム検索

緊急告知

本サイトより【アラジン】をご購入頂いた方は、お手数ですが下記アドレスまでメールを頂けないでしょうか。

サポート用メールアドレスのご連絡と、今後大規模改造が完成した際にはご連絡させて頂きます。

※メールには必ずInfotopからの購入完了メールに記載されている【注文ID】をご記載下さい。

chikamao@u3g.biz

QLOOKアクセス解析