perl
[API仕様変更対応]WWW::MechanizeでAmazonからマケプレ価格情報を取得する
posted in 16:31 2011年10月27日 by 涼微
API仕様変更対応しました → iPhone用 Amazonマーケットプレイス書籍検索
今回の10月26日のProduct Advertising API(PA-API)仕様変更は、Amazon側としても金にならないリクエストは御免被るよ!ということで、PA-APIから色々と機能を削除した(特にアソシエイトと関係の薄いやつ)と思われるのだけど、利用者側としてもそれは困るので何とか他の方法を考えてしまうわけです。
APIの制限解除申請したら今まで通り使えるとか、制限解除申請したのにやっぱり制限されてたとか、いろいろな声がありますが、制限されると言うアナウンスを見て自分はすぐに以下のコードを作ったので、備忘録として残しておきます。
これは、WWW::Mechanizeを使ったマケプレ価格情報の取得方法ですが、おそらくAmazonサイトからスクレイピングで情報を抜き出すのはあまり推奨されていない行為(誰か明確なソースを知っていたら教えて下さい)なので、ご利用は自己責任でお願いします。
これで配列@priceにISBNを指定した本の出品者全員のマケプレ価格情報が低価格な方から入っていると思います。
こうした方が速いとかこういう方法もあるよ、ということを知っていらっしゃるプログラミング中・上級者の方はご教授して下さいましたら大変助かります。
今回の10月26日のProduct Advertising API(PA-API)仕様変更は、Amazon側としても金にならないリクエストは御免被るよ!ということで、PA-APIから色々と機能を削除した(特にアソシエイトと関係の薄いやつ)と思われるのだけど、利用者側としてもそれは困るので何とか他の方法を考えてしまうわけです。
APIの制限解除申請したら今まで通り使えるとか、制限解除申請したのにやっぱり制限されてたとか、いろいろな声がありますが、制限されると言うアナウンスを見て自分はすぐに以下のコードを作ったので、備忘録として残しておきます。
これは、WWW::Mechanizeを使ったマケプレ価格情報の取得方法ですが、おそらくAmazonサイトからスクレイピングで情報を抜き出すのはあまり推奨されていない行為(誰か明確なソースを知っていたら教えて下さい)なので、ご利用は自己責任でお願いします。
use WWW::Mechanize;
use Encode;
my $enc_object = find_encoding("utf-8");
my $mech = WWW::Mechanize->new();
#ユーザーエージェントを設定しないとAmazonにアクセスできない
$mech->agent_alias('Windows IE 6');
#価格情報を取得したい本のISBN-10
my $isbn = "4478005338";
$mech->get("http://www.amazon.co.jp/gp/offer-listing/$isbn/");
#指定した本のコンテンツを取得
my $ama = $mech->content;
my $ama = $enc_object->encode($ama);
my @price = ();
my $item;
#価格情報を取得し終わるまで@priceに格納
while ($amazon =~ /class=\"price\">¥ (.*)<\/span>/g) {
$item = $1;
$item =~ s/,//;
push(@price, $item);
}
これで配列@priceにISBNを指定した本の出品者全員のマケプレ価格情報が低価格な方から入っていると思います。
こうした方が速いとかこういう方法もあるよ、ということを知っていらっしゃるプログラミング中・上級者の方はご教授して下さいましたら大変助かります。
amazonで詳細を見る | |
楽天で詳細を見る | |
ブックオフオンラインで中古品を見る |