Loading....
最近の投稿:

Archive for 3 月, 2009

楽天APIで制限された場合のメッセージを表示~モバイル版~

今回は、前回予告した通り、モバイル版サイトでの
楽天API制限時に適切なエラーメッセージを表示する
改造方法をご紹介します。

楽天APIの結果をOK、NG、DENIEDの3種類に増やして、
OK(成功)の時のみ、本来の表示処理を行い、
DENIED(楽天からの制限や通信障害など)の場合は
「混んでいる為、後でやり直して下さい」といった旨の
メッセージを表示し、
NG(商品無しや楽天メンテナンス時等)の場合は、
「情報を取得出来なかったのでやり直して」といった旨の
メッセージを表示します。

それぞれのメッセージはifやelseif、elseで区切られていて、
ちょっと見ればすぐにわかると思いますので、
皆さん、日本語の部分を自分の好きな文言に変更して
使って下さい。

では、実際の改造コードです。

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

lib\mrakutenAPI.phpに対する修正

行番号 : 36
const NG = 1;
この行の直後に下記コードを追加します。
  const DENIED = 2;  // 楽天APIからアクセス拒否
行番号 : 53,90,131,171
(上記修正前は各52,85,122,158行目)
return self::NG;
各行にあるこのコードを下記コードに変更します。
      if( $xml->Header->Status == '' ){
        return self::DENIED;
      } else {
        return self::NG;
      }

トップページの修正

mindex\contents.phpに対する修正

行番号 : 7
if(isset($p->category)){
この行を下記コードに変更します。
if($ret == rakutenAPI::OK){
行番号 : 25-28

}else{
echo<<<TO_END
{$warn1}<br />
{$warn2}

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

カテゴリーページの修正

mcategory\contents.phpに対する修正

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

※2行ある「}」のみの行の間に追加します。

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

msubcategory\contents.phpに対する修正

行番号 : 12
}else{
この行を下記コードに変更します。
} elseif($ret == rakutenAPI::DENIED){
行番号 : 14-16

<p style="text-align:center";>
キーワードを変更して検索し直してください。
<p>

この3行を下記コードに変更します。
<p style="text-align:center;">
ただいまアクセスが集中している為、商品情報を取得できませんでした。<br />
大変申し訳ございませんが、しばらく経ってからやり直して下さい。</p>
TO_END;
}else{
echo<<<TO_END
<p style="text-align:center;">
商品情報を取得できませんでした。<br />
しばらく経ってからやり直して下さい。</p>

商品詳細ページの修正

mitemdetail\contents.phpに対する修正

行番号 : 2
if( $ret != rakutenAPI::NG){
この行を下記コードに変更します。
if($ret == rakutenAPI::OK){
行番号 : 54
}else{
この行の直前に下記コードを追加します。
} elseif($ret == rakutenAPI::DENIED){
echo<<<TO_END
<p style="text-align:center;">
ただいまアクセスが集中している為、商品情報を取得できませんでした。<br />
大変申し訳ございませんが、しばらく経ってからやり直して下さい。</p>
TO_END;
行番号 : 61
(上記修正前は55行目)
echo "商品情報を取得できませんでした。";
この行を下記コードに変更します。
echo<<<TO_END
<p style="text-align:center;">
商品情報を取得できませんでした。<br />
しばらく経ってからやり直して下さい。</p>
TO_END;

検索結果ページの修正

misearch\contents.phpに対する修正

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

<p style="text-align:center";>
キーワードを変更して検索し直してください。
<p>

この3行を下記コードに変更します。
<p style="text-align:center;">
該当する商品が見つかりませんでした。<br />
キーワードを変更して検索し直してください。</p>

今回の改造は以上です。
改造箇所、改造量ともに結構あるので、
充分気をつけて修正して下さい。

人気ブログランキングへ
人気ブログランキングへ参加しています。
応援をお願いします。

楽天APIのwarningを抑制~モバイル版~

更新がずいぶん滞ってしまい、済みません。<m(_ _)m>
取りあえず第一弾のアラレボの開発も一段落し、
後は詳細なテストとマニュアルの作成となりました。

また、以前と同じように更新していきますので、
宜しくお願いします。

さて、今回は以前紹介した楽天APIの制限に引っかかった際の対応で、
モバイルサイトの対応に関して追加補足させて頂きます。

以前紹介した改造では、主にPCサイトへの対応のみであり、
モバイルサイトにはAPI失敗時のワーニング抑制のみで、
その後の影響に関しては改造コードを紹介しませんでしたが、
それを今回は取り上げようと思います。

以前の記事に関してはこちらをどうぞ。

以前は第一回でワーニングの抑制を、
第二回で適切なエラーメッセージの表示を行う
改造をご紹介しましたので、
今回も2回に分けてご紹介致します。

まず、今回は楽天API制限によって商品情報取得が失敗された際に
モバイルサイトのカテゴリーページで表示される下記メッセージを
表示しないようにする改造方法をご紹介します。

・カテゴリーページで表示されるメッセージ

Warning: Invalid argument supplied 
for foreach() ・・・

これは楽天APIで商品情報の取得に失敗しているにも関らず、
カテゴリーページでその情報を表示しようとする為、
発生するエラーです。なので、その部分をAPI成功の時のみ
実行するようにしてやります。

では、実際の改造コードです。

mcategory\contents.phpに対する修正

行番号 : 5
foreach($p->category as $c){
この行の直前に下記コードを追加します。
if( $ret == rakutenAPI::OK){
行番号 : 20
(上記修正前は19行目)
}
この行の直後に下記コードを追加します。
}

※元々は1行のみだった閉じ括弧(})を2行にします。

今回の改造は以上です。
これで前述のWarningメッセージは表示されなくなります。
ただし、これでは本当に表示させないだけですので、
次回はアラジンサイトとして適切なメッセージを表示する様な
改造方法をご紹介します。
しばし、お待ち下さい。

人気ブログランキングへ
人気ブログランキングへ参加しています。
応援をお願いします。

《緊急告知》アラジン・レボリューション発売予定

ここ数日、更新がストップしてしまい、
申し訳ありませんでした。

改造ネタはまだまだあるのですが、
公開できる形になっていないものが多いのと、
ちょっと、このアラジンについて、
抜本的な改造に取り組んでいたもので。

で、その抜本的改造の方もようやく形になりつつあるので、
今回はそれに関して、みなさんにお知らせ致します。

設置が非常に簡単ゆえにカスタマイズ性に乏しく、
同じようなサイトを大量に発生させてしまう【アラジン】。
当初、みんながこれを使用すると、検索エンジンから
すぐにスパム判定を受けてしまうに違いないと思い、
みんなでアラジンを長く使って収益をあげられるようにと
本サイトを始めました。

この私の心配は多くの方も共通して抱いていたようで、
本サイトは私の予想を越えてみなさんに閲覧して頂いています。
本当にありがとうございます。<m(_ _)m>

しかし、サイトで公開する改造には限界がありますし、
そもそも、アラジンは改造したくても
PHPソースを修正する事には躊躇いを持っている方も
多数いる事と思います。

そこでこの度、私の方でアラジンを改造して、
その改造部分のみを皆さんに販売しようと思いたちました。

※販売するのはあくまで改造コードのみなので、
既にアラジンをお持ちの方しか利用することはできません。

名づけて【アラジン・レボリューション】!!
・・・略して「アラレボ」で宜しくお願いします。(笑)

アラレボ第一弾ではオリジナルアラジンからHTML/CSS部分を
分離したHTMLテンプレート化アラジンを販売致します。

これで、PHPを知らなくても、HTMLとCSSの知識さえあれば
アラジンの見栄えを自分の思いどおりに変更できます。

もちろん、楽天の他のバナーや、グーグルアドセンスを
貼ったりすることも自由自在!
お好きにカスタマイズして下さい。

これで自分のオリジナルデザインの仮想楽天ショップを
オープンする事もできますし、
似たようなデザインのサイトばかりで、いつかGoogleから
スパムサイト判定されて、誰も来なくなるんじゃないかと
いった心配も無用ですね。

また、今後立ち上げ予定のサポートサイトでは、
アラレボ」をカスタマイズする為のHTML/CSS解説や、
追加のデザインテンプレート等のご紹介も行っていきますので、
購入した後のサポートもご心配無く。
簡単なカスタマイズであれば、ご要望のカスタマイズをした ファイルをお渡しする事も検討しています。

近日販売開始予定ですので、是非ご期待下さい。

更にアラレボ第二弾では、
アラジンの機能強化版を販売致します。
主な強化機能としては、

  • 送料・税金別/込情報
  • カード利用可/不可の情報
  • タイムセール情報(セールの時間帯)

等の商品情報の追加や、

  • 表示用キーワードと検索用キーワードの分離
  • 検索NGキーワードの追加
  • サブカテゴリー単位での検索ジャンル指定

等の検索機能の強化があります。

これら機能強化のデモサイトが稼動していますので、
興味のある方は下記サイトをご覧ください。

グッチ財布のお得情報館

アラレボ第二弾に関してもできる限り早い段階で
販売できるように尽力していますので、
ご期待の上、お待ち下さい。

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

楽天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;

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

楽天APIのwarningを抑制する

先日アラジンで作成したサイトを観ていたら、
とんでもない問題を発見してしまいましたので、
今回はその問題と対処方法をご紹介します。

その問題とは、デベロッパーIDの流出です。

楽天のデベロッパーIDがあると何が出来るかっていうと、
私の知る限り、楽天ウェブサービス(楽天API)を
利用できることぐらいしか今のところ知りません。

なので、流出によって発生する実際の被害に関しては
私は何も申し上げられません。
・・・何もないのかも・・・

しかし、楽天ウェブサービス規約を見ると、
第5条(デベロッパーID)の中に
下記のような記載があります。

2.利用者は、デベロッパーIDを他人に知られることがないよう責任を
もって管理するものとします。当社は、入力されたデベロッパーID
が当社が発行したものと一致することを所定の方法により確認した場
合、利用者による使用があったものとみなし、それらが盗用、不正使
用その他の事情により利用者以外の者が使用している場合であっても、
それにより生じた損害について当グループは一切責任を負いません。

なので、デベロッパーIDは出来るだけ他人に明かさず
隠しておくべき情報であるといえます。

さて、アラジンで作成したサイトでどのように
デベロッパーIDが流出するかですが、
アラジンで作成したサイトを何度も繰り返し
リロード(F5キー)していると、
商品が表示されなくなる時があります。

これは楽天APIを短時間に規定を超える回数
実行したことによる楽天ウェブサービスの
制限なのですが、このときにサーバーによっては
Warningコードを画面に出力してしまいます。

その中にデベロッパーIDとアフィリエイトIDが
バッチリ表示されてしまうのです。

※テストする際は、ご自身のサイトで確認してください。
くれぐれも他人のサイトや
私のサイトでテストしないでください。(笑)

下図に例を載せます。
上が通常時で、下がワーニング発生時です。

通常時のトップページ


警告時のトップページ

※黒くつぶしている部分に私のIDが表示されています。

ちなみにこのワーニングが表示された状態で
Googleにキャッシュされてしまったサイトも
複数存在するようです。
恥ずかしいので、早めに対処しましょうね。

ワーニングの表示は使用しているサーバーによっても
違うようで、私は二つのサーバーを使用していますが、
ハッスルサーバーでは発生しますが、
エックスサーバーでは発生しません。
(デベロッパーIDを含むワーニングが
表示されないという意味です。)

エックスサーバーでのワーニング発生時の画面がこれです。

Xserverでの警告時
単に商品が表示されないだけです。

多分サーバーのPHPの設定(php.iniや.htaccess)に
よるものだと思いますが、ちゃんと確認していないので、
本ページではアラジンのソースコードを修正する
解決方法をご紹介します。

蛇足ですが、私エックスサーバーやハッスルサーバーに
関するレビューサイトも運営していまして、
もし興味を持たれた方がいらっしゃれば、
下記ページをご覧ください。
他にも60GBの大容量を誇るレンタルサーバーの
レビューなんかも行っています。

エックスサーバーを実際に使ってみて | 独自ドメインで格安・安定サーバー
ハッスルサーバーを選んだ理由 | 独自ドメインで格安・安定サーバー
月額1,800円で60GBのレンタルサーバー | 独自ドメインで格安・安定サーバー

では、修正コードです。

lib\rakutenAPI.php(に対する修正

行番号 : 47,79,116
各行に存在する「file_get_contents」の直前に「@」を追加します。
@file_get_contents」とする訳です。

index\contents.phpに対する修正

行番号 : 20
foreach($p->category as $c){
この行の直前に下記データを追加します。
if($ret == rakutenAPI::OK){
行番号 : 44
$i++」の直後に2行続いている「}」を3行にします。
「}」のみの行を3行にする訳です。

今までPCサイトばかりに修正を行っていましたが、
今回の問題は結構深刻だと思いますので、
同様にモバイルサイトも修正しておきましょう。

lib\mrakutenAPI.php(に対する修正

行番号 : 47,79,116,152
各行に存在する「file_get_contents」の直前に「@」を追加します。

今回の修正で、ワーニングは表示されなくなりますが、
商品を表示/検索できないことには変わりがないので、
本当は楽天APIをキャッシュするなどして、
API発行回数を少なくしてやるのが一番良いのですが、
その修正は大掛かりだったり、サーバーによって
修正方法が異なっていたりと、簡単にご紹介できる
内容ではないため、今回はこのような修正になりました。

キャッシュ化については違う方法で近い内に
公開したいと思っておりますので、ご期待ください。

(2009年3月29日追記)
本記事の改造だけでは、モバイルサイトの
カテゴリーページにて、楽天API制限の影響による
ワーニングが表示されてしまいます。
これに対する対応に関してはこちらをご参照下さい。

人気ブログランキングへ
人気ブログランキングへ参加しています。
応援をお願いします。

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

カスタム検索

緊急告知

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

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

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

chikamao@u3g.biz

QLOOKアクセス解析