BLOGTIMES
2007/11/18

AmazonECSのXMLをXML::XPathで処理する

  perl  xml  amazon 
このエントリーをはてなブックマークに追加

ちょっとワケあってPerlでECSからデータを取得するスクリプトを作らなければならなくなった。Perlを使うのは5年ぶりくらい、当時はXMLの処理するのも正規表現で無理やりというなんとも恥ずかしいコードを書いていました

その後、XSLを使う機会があってXPathの便利さに味を占めてしまったので、PerlでもXPathを使って処理してみることにします。ということで、XML::XPathを使ってAmazonECSからのデータを処理してみることにします。

簡単なサンプル

手始めにECSを使って売れ筋Top100の情報をTSVとして吐き出すスクリプトを書いてみました。
やっぱりXPathだと簡潔にかけて大変よろしいです。

#!/usr/bin/perl use CGI; use LWP::Simple; use XML::XPath; use URI; # Settings my $aws_access_key_id = '(youraccesskey)'; my $debug = 0; # For debug my $n = 1; while( $n < 11){ my $uri = URI->new('http://webservices.amazon.co.jp/onca/xml'); my @param = [ Service => "AWSECommerceService", AWSAccessKeyId => $aws_access_key_id, Operation => "ItemSearch", SearchIndex => "Books", BrowseNode => "465610", ResponseGroup => "Request,Large", Version => "2007-01-15", Sort => "salesrank", ItemPage => $n, ]; $uri->query_form(@param); my $response_string = get($uri); # XPathオブジェクトを生成 my $xp = XML::XPath->new(xml=>$response_string); # ItemをTSVにする foreach my $item ( $xp->findnodes('//Items/Item') ) { my $p = XML::XPath->new(context=>$item); my @dat = (); push(@dat, $p->findvalue('ASIN')); # ASIN push(@dat, $p->findvalue('ItemAttributes/EAN')); # ISBN13 push(@dat, $p->findvalue('ItemAttributes/Title')); # タイトル push(@dat, $p->findvalue('ItemAttributes/Author')); # 著者 push(@dat, $p->findvalue('ItemAttributes/ListPrice/Amount')); # 価格 print join("\t", @dat)."\n"; undef @dat; } $n++; sleep(1); }

久しぶりなので、限りなくダサい可能性が高いけど、まぁ動いたからよしとしておきます。そんなに時間を使ってもいられないし。。。。
うーん、これと同じものがphpにも標準になってくれないかなぁ。

参考

404 Blog Not Found:perl - 勝手に添削 - isbn2asin
PerlでXMLを扱う - スピリッツオブゼロ@blog


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2285
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン