AmazonにはProduct Advertising APIというサービスがあります。ECSとかAWSとか言われていたやつです。
関連商品の取得方法にはいくつか方法があり大きく分けると、サーチ系のAPIのResponseGroupにSimilaritiesを指定するかSimilarityLookupというAPIを使うかです。
ItemLookupのResponseGroupに指定すると5件、SimilarityLookupを使うと10件取得できます。SimilarityLookupのResponseGroupにSimilaritiesを指定するとさらにその10件の関連商品を取得できます。(まぁこの場合は殆どが被っていますが・・・。)
ただしAmazonのホームページを見ると70件近くの関連商品が表示されています。
SimilarityLookupで複数のItemIdを指定しRandom抽出(和集合)を取得するようにしても、同じ集合が取れません(´・ω・`)
商品Aの関連商品A1~A10のASINがあって、A-A1の和集合、A-A2の和集合.... をマージ等、色々試してみましたがやっぱり公式サイトと同じリストを再現できません。あそこのリストどうやって作っているのでしょう(´・ω・)
煮詰まってしまったので公式サイトのHTMLから引っこ抜いてみました。
http://www.amazon.co.jp/dp/{ASIN}
このページにアクセスしますが、User-AgentをきちんとAjaxをサポートしているブラウザのやつに指定する必要があります。適当なUser-Agentつけて送ったらJavaScriptのコードが出力されませんでした。Firefox3.5のUser-Agentを使ったらJavaScbriptのコードも出力されました。
var purchaseAsinList = new Array("aaa","bbb","ccc");
この様なコードが出力されているのでパースするだけです。Javaなら↓のようなコードでぱぱっと。
int beginIndex = html.indexOf("var purchaseAsinList"); int endIndex = html.indexOf("\n", beginIndex); String pscript = (html.substring(beginIndex, endIndex)); Matcher m = Pattern.compile("\"(\\w+)\"").matcher(pscript); while (m.find()) { System.out.println(m.group(1)); }
微妙・・。きちんとAPIを叩いて処理したいです(´・ω・)
というわけで情報募集です。