Using Amazon's WSDL services

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

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&#39;

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.

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

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.

···

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

Hi,

Sorry for late reply.

H. Wade Minter wrote:

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&#39;

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:in `ListLookup'
        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

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

···

Dave Baldwin <dave.baldwin@3dlabs.com> wrote:

Try using the ruby amazon library
Ruby/Amazon

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

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 Baldwin <dave.baldwin@3dlabs.com> wrote:

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

> 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

Try using the ruby amazon library
Ruby/Amazon

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.

>

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

Jeff Wood