PEARのamazonAPIから商品一覧を取得できるServices/Amazon.php。でもエラーで400。。。

PEARのamazon商品一覧を取得できるServices/Amazon.phpは大変便利なのだが、2017/8か9あたりから不調になっていた。
原因を調べるとPEARから吐き出されていたエラー400。久しぶりの冷汗だ。
たしかそのころAmazonのアカウントのメールアドレスを変更したぞ、と思い出してアソシエイト、APIのアカウントも変更しようとするも複雑だったあ…。
でもなんとかやったよ。
アカウントの目アドはアソシエイトもAPIのアカウントも全部そろえる必要があるってよ。アソシエイトからAPIアカウントを作成するときのページにけっこうでかでかと書いてある。。

晴れてメールアドレスが揃い、念のためアクセスキーとシークレットアクセスキーも取得しなおしておいた。
これで直った!はず!、と思ったけどダメ。PEARからは同じく400のエラー。

いろいろ調べるとサーバーの時間があっていないとそうなるよ、的な解説が散見できた。正確に言うと15分以上ずれているとダメらしいことまでわかってきた。
なのでサーバーの時刻を確認。ぜんぜん大丈夫、日本時間にぴったり。もしかして、、グリニッジ標準とかじゃないとダメなのか??世界のamazonはやっぱ違うな!、と今度はPHPでタイムゾーンを変えてみる。そんなことしても状況は変わらない。
どうしてだ、、、。と二日くらいくじけていた。
そこである記事を発見。
http://novelel.com/index.php/2015/09/01/post-189/
要約すると「アメリカのamazonに取得しに行ってしまうとダメだから日本のamazonに取得させるよう、Localeをセットすること」とあった。
これだ!と思って確認するも、

$amazon->setLocale('JP');

と、ちゃんと日本になっている。間違ってない。
じゃあ、なにがダメなんだ??とまた二日くじける。

あるとき「PEARがダメなんじゃね?その検証してぇ」と思って探してみると
https://www.panzee.biz/archives/6262
というページを発見。すごいよく作ってくれている。PEARなしで実験できるじゃん。
この作者お手製コードを使っても取得できなければ、PEARのせいではないことがわかるはず。
アクセスキーを入れて、実験開始!
…やっぱダメだ。。取得できねえ。
ということでこんどはアクセスキーじゃねえか?と疑いの矛先を変更して、何度もアクセスキーを発行してはできない、発行してはできない、を繰り返して自分が醗酵してしまうような状況に。

あきらめかけたそのときだった。
「日本のamazonに取得させる」を思い出して、さっきの作者お手製コードにあった

$baseurl = "http://webservices.amazon.com/onca/xml";

$baseurl = "http://webservices.amazon.co.jp/onca/xml";

と変えてみた。
できた!できたよ!と家中の人間に喜びの理由を説明して回るも、誰も理解せず。でもいい!それでいい!
しかしそれをどうやってPEARでやんのよ?
PEARのServices_Amazonの公式ドキュメントあさったよ。けっこう得意なんだ、こういう根性でやる宝探し。
https://pear.php.net/.../Services_Amazon.html#methodsetBaseUrl

公式にあるとおり、setBaseUrl();で設定しましたよ、こんな風に。

$amazon->setBaseUrl('http://webservices.amazon.co.jp/onca/xml');

できたよできた!

いやあ、何日かかったんだろ。いい勉強だったなあ。(汗をぬぐう、それはもう冷や汗じゃない)
あんたも困ってここに辿り着いたんだったらその心境聞かせてくれ!悩みなら吐き出してみれば解決するかもしれないぜ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA