http://b.hatena.ne.jp/asin や 2ch まとめブログ等 Amazon へのリンクを貼っている Web ページから Amazon の商品情報を一度に全て抽出するスクリプトを書いてみました.スクリプトは gem として公開しているので,以下のようにしてインストールして下さい.
$ gem install crown
サンプルコード
require 'rubygems' require 'crown' # 初期設定 # Amazon Product Advertising API 開発者に登録して各種キーを取得する Amazon::Ecs.options = { :aWS_access_key_id => 'YourAccessKey', :aWS_secret_key => 'YourSecretKey', :country => :jp, } # 2 つめの引数に指定する値は Amazon::Ecs のオプション Crown::Amazon.each(ARGV[0], { :response_group => 'Medium' }) { |item| puts(item.get('title')) puts(" asin: #{item.get('asin')}") puts(" author: #{item.get('author')}") puts(" price: #{item.get('amount')}") puts(" publisher: #{item.get('manufacturer')}") puts(" group: #{item.get('productgroup')}") puts(" image: #{item.get('largeimage/url')}") puts }
例えば,http://b.hatena.ne.jp/asin を指定したときの実行結果は以下のようになります.
$ ruby example-crown-amazon.rb http://b.hatena.ne.jp/asin キャリア官僚になったアタシ。。。でも、挫折しました(>_<)―24歳女子が見た官僚と刑務所の世界 asin: 4844135619 author: 後藤 裕美 price: 1260 publisher: 雷鳥社 group: Book image: http://ecx.images-amazon.com/images/I/516lzrUwLAL.jpg 「WORKING!!」PERFECT☆Blu-ray BOX asin: B004UJKYZ8 author: price: 33600 publisher: アニプレックス group: DVD image: http://ecx.images-amazon.com/images/I/51paPhyZkIL.jpg STEINS;GATE 比翼恋理のだーりん(初回限定版) asin: B004UPAHBI author: price: 9240 publisher: 5pb. group: Video Games image: http://ecx.images-amazon.com/images/I/51NJwPDshbL.jpg ...
抽出方法は,取得した Web ページの a タグ href 属性からホストが (www.)amazon.* のものを抜き出し,それぞれのパスとクエリから ASIN コードっぽい値を抽出します.ASIN コードの抽出方法は,ASIN(ISBN)のチェック で紹介されている /[B0123489][A-Z0-9]{9}/ で抜き出して先頭が 'B' であればその値をそのまま使い,'B' 以外であれば ISBN-10 チェックディジットを計算してみると言う方法を採用しています.
抽出した ASIN コードから商品情報を取得する部分は,Amazon::Ecs を使用しているので,初期設定,each 関数のオプションに指定する値,ブロックに渡される item の内容は Amazon::Ecs に依存します.ブロックに渡される item にどのような情報が含まれているかは,Ruby on Rails で Amazon Product Advertising API を利用する - KagaYoshito.com などが参考になります.