AmazonとSOAP4Rで遊ぼう
NaHiに構成力があればなぁ。
→wiki:AmazonとSOAP4R?と日本語で遊ぼう
Googleに引き続き、 Amazon.comも検索やショッピングカート機能をWebサービスで提供 しています。soap4rでいじってみましょう。
以前はGoogleと同じく、Amazon.comのWeb Servicesを利用する場合にも、まずAmazon.comでの 開発者登録が必要だったんですが、今はなくても使えるようです。機能に制限があるのかな? もし心配でしたら、以下のサンプルを動かす前に http://associates.amazon.com/exec/panama/associates/ntg/browse/-/1067662 を読み、(2)のリンク先からdeveloper's tokenを入手して、~/.amazon_keyに保存しておいてください。
ではAmazon.com内を検索するコードを書いてみます。 wiki:GoogleとSOAP4R?で遊ぼう のときは、WSDLを読ませてメソッドを叩けばいきなり 検索できましたが、Amazon.comの場合はちょっと準備が必要です。
GoogleWebAPIは、提供サービスの呼び出しパラメータが全て文字列や数値などの基本的な型だったのですが、 Amazon.com Web Servicesの場合は呼び出しパラメータが構造体になっています。 そのため、専用のクラス定義が必要になります。 Googleの場合はたくさんのパラメータを送りつける、という形でしたが、 Amazon.comは呼び出しパラメータ構造体に検索パラメータをセットし、 それを1つ送りつけると返事が返ってくる、という形になります。
ではキーワード検索呼び出しパラメータクラスを以下に。 どんなメソッドにどんなパラメータを渡すかについては、 Amazon.com Web Servicesのページから、Developer's Kitをダウンロードしてくると まとめられています。もちろん英語だけどね。
class KeywordRequest
def initialize( keyword = nil,
page = nil,
mode = nil,
tag = nil,
type = nil,
devtag = nil,
sort = nil )
@keyword = keyword
@page = page
@mode = mode
@tag = tag
@type = type
@devtag = devtag
@sort = sort
end
end
↑では自分でクラスを定義しましたが、 ((<Amazon.comのWSDL|URL:http://soap.amazon.com/schemas2/AmazonWebServices.wsdl>)) から自動生成させる方法もあります。
$ bin/wsdl2ruby.rb --wsdl http://soap.amazon.com/schemas2/AmazonWebServices.wsdl --classDef --force I, [2003-01-19T12:54:05.931448 #112] INFO -- app: Start of app. I, [2003-01-19T12:54:08.260448 #112] INFO -- app: Creating class definition. I, [2003-01-19T12:54:08.269448 #112] INFO -- app: Creates file 'AmazonSearch.rb'. I, [2003-01-19T12:54:08.318448 #112] INFO -- app: End of app. (status: 0)
AmazonSearch?.rbができているのでその中を見て、上記のKeywordRequest?クラスが定義されていること を確認してください((-他にもいろいろクラスができています。全65クラス…。 一通りクラスを見ると、どんな情報が取り出せるかがわかるでしょう-))。
では準備ができたので検索プログラムです。
$ cat search.rb
require 'soap/wsdlDriver'
searchBook = ARGV.shift or raise
# AmazonSearch.rbを生成しなかった場合、↓のかわりに、自分でKeywordRequestクラスを定義してください。
require 'AmazonSearch.rb'
devtag = "" # File.open(File.expand_path("~/.amazon_key")).read.chomp
AMAZON_WSDL = 'http://soap.amazon.com/schemas2/AmazonWebServices.wsdl'
amazon = SOAP::WSDLDriverFactory.new(AMAZON_WSDL).createDriver
amazon.generate_explicit_type = true
#amazon.wiredump_dev = STDERR
# Show sales rank.
req = KeywordRequest.new(searchBook, "1", "books", "webservices-20", "lite", devtag, "+salesrank")
amazon.KeywordSearchRequest(req).Details.each do |detail|
puts "== #{detail.ProductName}"
puts "Author: #{detail.Authors.join(", ")}"
puts "Release date: #{detail.ReleaseDate}"
puts "List price: #{detail.ListPrice}, our price: #{detail.OurPrice}"
puts
end
KeywordRequest?クラスインスタンスに検索パラメータをセットし、KeywordSearchRequest?を 呼び出しています。sortパラメータに"+salesrank"を指定すると、売り上げ数順に並べ替えてくれるそうです。 では実行。
$ ruby search.rb 'ruby programming' == Programming Ruby: A Pragmatic Programmer's Guide Author: David Thomas, Andrew Hunt, Dave Thomas Release date: 15 December, 2000 List price: $42.95, our price: $42.95 == The Ruby Way Author: Hal Fulton Release date: 17 December, 2001 List price: $39.99, our price: $27.99 == Sams Teach Yourself Ruby in 21 Days Author: Mark Slagell Release date: 22 March, 2002 List price: $39.99, our price: $27.99 == Making Use of Ruby Author: Suresh Mahadevan, Rashi Gupta, Shweta Bhasin, Madhushree Ganguly, Ashok Appu Release date: 15 July, 2002 List price: $35.00, our price: $24.50 == Solving Data Mining Problems Through Pattern Recognition (Bk/CD) Author: Ruby L. Kennedy, Yuchun Lee, Benjamin Van Roy, Christopher D. Reed, Richard P. Lippmann, Staff Unica Technology Incorpor Release date: 04 December, 1997 List price: $69.93, our price: $69.93 == Ruby Developer's Guide Author: Robert Feldt, Lyle Johnson, Michael Neumann, Lyle Johnson, Jonothon Ortiz Release date: 18 January, 2002 List price: $49.95, our price: $34.97 == Ruby In A Nutshell Author: Yukihiro Matsumoto, David L. Reynolds Release date: November, 2001 List price: $24.95, our price: $17.47 == Word Processing Applications for Microcomputers Author: Ralph, Ruby Release date: October, 1986 List price: $19.10, our price: $19.10
やはりProgramming Rubyが一番でした。 む。Ruby Developer's Guideの作者にLyle Johnsonが2人居るようですが、 Amazon.comに連絡したほうがいいのかしらん。