もう既に気付いた読者の人もいるかもしれませんが、sample001 や sample002 のプログラムでは、検索キーワードによって、商品データが表示されないことがあります。
少し具体的に言うと、同じ検索キーワードでも、表示されるページと表示されないページがあるのです。
下の答えを見る前に、ちょっとだけ原因を考えてみてください。
・表示されない時がある
・でも正常に動く時もある
原因が推測できましたか?
では回答です。まずは実際に現象を再現してみましょう。
ただし楽天ウェブサービスのデータベースが更新されると、同じ手順では現象を確認できないことがあります。その場合はあなたのケースに置き換えて読んでください。
*2008年5月7日時点のケース
【1】例えば sample002 で、検索キーワードを「ヨーグルト」にすると、プログラムが処理中のまま動かなくなってしまいます。
var paramList = "keyword=" + encodeURIComponent("ヨーグルト");
paramList += "&hits=10";
paramList += "&page=1";
【2】そこで Firefox の Firebug を使ってプログラムを追うと、どうやら4つ目の item で、商品説明文の値を取得する部分に問題がありそうだ、ということが分かります。
【3】検証のため、検索キーワードは「ヨーグルト」で、取得ページを2ページ目にすると、正常に表示されました。
var paramList = "keyword=" + encodeURIComponent("ヨーグルト");
paramList += "&hits=10";
paramList += "&page=2";
1ページ目のデータに問題がありそうです。
【4】1ページ目でも、1ページあたりの取得件数を「3」にすると正常に表示されました。
var paramList = "keyword=" + encodeURIComponent("ヨーグルト");
paramList += "&hits=3";
paramList += "&page=1";
【5】1ページ目で、取得件数を「4」にすると表示されません。
var paramList = "keyword=" + encodeURIComponent("ヨーグルト");
paramList += "&hits=4";
paramList += "&page=1";
ということは、やはり1ページ目の4件目のデータに、何か問題があると推測できます。
では原因を調べてみましょう。
【6】Webブラウザの URL にパラメータを指定して、中継スクリプトを直接表示します。
例
http://localhost/rakuten/lib/ItemSearch.php?&keyword=%E3%83%A8%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%88&hits=10&page=1&sort=%2BitemPrice&imageFlag=1
検索キーワードとソートのエンコードはこちらで
・エンコード・デコード
【7】4件目の itemCaption タグが、空だったことが原因だとわかりました。
以前に XML を手動で表示する練習をしておいたことが、こんな時に役立つわけです。
楽天ウェブサービスは、ネットショップのデータなので、商品名や商品価格が空のことは無いと思いますが、商品説明文などは空のケースがあるということです。
したがって、値が空の場合を想定したプログラムに改良する必要があります。
【ワンポイント】
このように問題が起こったら、現象を再現し、プログラムを追い、仮説を立て、一つ一つ検証していくと原因が特定できます。
原因が分かれば、あとはプログラムを修正するだけです。