PAAPIで「Fatal error: Cannot use object of type PEAR_Error as array in~」というエラー。BrowseNodeLookupはだめでItemSearchはOKという例

 AmazonのPAAPIでエラー。「Fatal error: Cannot use object of type PEAR_Error as array in 行番号」といった感じのメッセージが返ってきている。
 気づいたのは、Googleのウェブマスターツールから。そのページでレスポンスコード「500」が出ているという。そのページをチェックすると、表示されない。Apacheの.htaccessでエラー表示をしない設定にしているので内容はわからない。当然だ。続いて、ローカル環境でテスト。こちらは当然エラーを表示する設定だ。
 そこで確認できたのが冒頭の

 Fatal error: Cannot use object of type PEAR_Error as array in 行番号

 だ。PEARのServices/Amazonライブラリを使用しているのだけど、それなんだろう。Googleで検索すると、1時間に2000以上のリクエストをした場合の例が出てきた。
 今回も、なんらかのメッセージがPAAPIから返ってきているはずである。さらにそのメッセージも確認。

 AWS.InvalidParameterValue:13321861は、BrowseNodeIdの値として無効です。値を変更してから、再度リクエストを実行してください。

 ブラウズノードが有効じゃないそうだ。
 ブラウズノードは変動する場合がある。新しいノードが追加される場合もあるし、前あったものがなくなることもある。それにひっかかったんだろう。
 ここで挙げているウェブアプリケーションは、ブラウズノードを指定してItemSearchをしている。
 すなわち Operationに「ItemSearch」、BrowseNodeにブラウズノードを指定しているのだ。
 でもって、そのブラウズノードの親ノード、子ノードの情報も取得して、さらにページへのリンクを作るために、BrowseNodeLookupを行なっている。そこでエラーが出ているのだ。
 じゃあ、BrowseNodeLookupの部分だけなくせばどうか?
 なんと、これで通る。
 同じブラウズノードを指定していてもBrowseNodeLookupはだめで、ItemSearchはOKなのだ。
 こんなこともあるのだな。もちろん、ItemSearchで拾えたデータにもブラウズノードに関する情報(ノードの名称とか)は含まれてない。商品の情報だけが返ってくるのだ。このノードが何のノードだったかを知るすべももうない。
 まあ、いずれにしても、そのブラウズノードはいつかはなくなるのだろう。ItemSearchも通らなくなると思われる。
 じゃあ、どうしよう。
 エラーが出ているんじゃ困る。とりあえず、ItemSearchで取得できた商品は表示するようにしておく。そっからAmazonへ飛んでくれればめっけものだ。
 そんでもって、BrowseNodeLookupで取得したナビゲーション部分のうち、今回ひっかかったブラウズノードは、すでに表示されることはないはず(拾えないのだから)。Googleのbotもここはもう見なくなるだろう。
 という予想は間違ってるだろうか? どっちにしても検索してひっかかるようなページではないだろうし。とか言ってたら最初からやることはないのだが。
 そういえば、ブラウズノードが変更されました、っていうAmazonのアナウンスをちょっと前に見たような気がしたけど、どこだったっけ?

コメント