Using Amazon's WSDL services


#1

I’m trying to create a simple test script to hit Amazon’s web services
via
their WSDL listing (specifically the Wishlist Lookup). I’m going on the
examples in the Pickaxe.

Here’s my sample script:

#!/usr/bin/env ruby

require ‘soap/wsdlDriver’

wsdl =
http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl

soap = SOAP::WSDLDriverFactory.new(wsdl).createDriver

result = soap.ListLookup

However, when I run it, I’m getting a ton of error messages to the
screen
that look like:

Unknown element {http://www.w3.org/2001/XMLSchema}annotation.
Unknown attr {}ref.
Unknown attr {}ref.

Followed by a final error like:

soap.rb:10: undefined method `ListLookup’ for
#SOAP::WSDLDriver:0x84f7898
(NoMethodError)

I’m not a WSDL expert, so I’m confused as to whether the problem is on
my
end, or on the Amazon end. Anyone better-versed than I willing to take
a
look?

Thanks,
Wade


#2

On 29 Nov 2005, at 13:57, H. Wade M. wrote:

However, when I run it, I’m getting a ton of error messages to the
0x84f7898>
(NoMethodError)

I’m not a WSDL expert, so I’m confused as to whether the problem is
on my
end, or on the Amazon end. Anyone better-versed than I willing to
take a
look?

Thanks,
Wade

Try using the ruby amazon library
http://www.caliban.org/ruby/ruby-amazon.shtml

makes this type of thing so easy. I used it to pull album art:

require ‘open-uri.rb’
require ‘amazon/search’
include Amazon

DEV_TOKEN = “XXXXXXXXXXXXXXXX” # you need to register to get
one of these

def getArtwork (artist, album)
image = nil
re = Regexp.new(album, Regexp::IGNORECASE)
print “Looking for #{artist}, #{album} …”
req = Search::Request.new(DEV_TOKEN, nil, ‘uk’)
resp = req.artist_search(artist, ‘music’, Search::LITE)
prods = resp.products
pr = prods.find {|pr| pr.product_name =~ re}
if pr
image = open(pr.image_url_small).read
print “got artwork\n”
else
print " not found.\n Possible album names:"
prods.each {|pr| puts “\t#{pr.product_name}”}
end
sleep 1 # don’t access amazon too quickly
image
end

Dave.


#3

Dave B. removed_email_address@domain.invalid wrote:

Try using the ruby amazon library
http://www.caliban.org/ruby/ruby-amazon.shtml

makes this type of thing so easy. I used it to pull album art:

I’d checked that out, but I’m trying to make this as dependent on the
Ruby
base as possible, so people don’t have to install extra modules. The
ruby-amazon is my fallback, but I’d like to get it working with the pure
standard soap module.

–Wade


#4

Although Amazon::Search works, I’d love to see an example that actually
uses Soap4r and doesn’t just do the HTTP requests itself.

j.

On 11/29/05, Dave B. removed_email_address@domain.invalid wrote:

Here’s my sample script:

look?
require ‘open-uri.rb’
req = Search::Request.new(DEV_TOKEN, nil, ‘uk’)
sleep 1 # don’t access amazon too quickly
image
end

Dave.


“Remember. Understand. Believe. Yield! -> http://ruby-lang.org

Jeff W.


#5

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Sorry for late reply.

H. Wade M. wrote:

wsdl = ‘http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl

soap = SOAP::WSDLDriverFactory.new(wsdl).createDriver

Please call a method ‘create_rpc_driver’ instead of ‘createDriver’.
‘createDriver’ should work but it is deprecated method.

result = soap.ListLookup

I tried above (with createDriver -> create_rpc_driver modification)
under ruby-1.8.4 and got different result;

/usr/local/lib/ruby/1.8/soap/rpc/driver.rb:230:in listLookup': wrong number of arguments (0 for 1) (ArgumentError) from /usr/local/lib/ruby/1.8/soap/wsdlDriver.rb:117:inListLookup’
from list.rb:10

I think the method ‘ListLookup’ requires a parameter which is defined as
‘ListLookupRequest’ in the WSDL.

soap.listLookup(:ListLookup => “123”)

returns something for me.

Regards,
// NaHi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Cygwin)

iD8DBQFD5HT2f6b33ts2dPkRApM7AKCMNVJnGu+3ztX5pwKZOmWxa7mqsQCgo38M
BOd+K0Z7pbMbQTIhYHZsWbw=
=yntq
-----END PGP SIGNATURE-----