特定の Web ページから Amazon 商品情報を全て抽出する

http://b.hatena.ne.jp/asin2ch まとめブログ等 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 などが参考になります.