0

vaccum を使用して、Amazon Product Advertising API から製品の詳細を取得しています。req = Vacuum.new

    req.configure(key: configatron.api.amazon.productAPI.key,
              secret: configatron.api.amazon.productAPI.secret,
              tag:    'biz-val')

    regex =  Regexp.new "http://([^/]+)/([\\w-]+/)?(dp|gp/product|exec/obidos/asin)/(\\w+/)?(\\w{10})"
    productID=regex.match(@url).captures[4];
    host=regex.match(@url).captures[0];
    utype=regex.match(@url).captures[2];

    @url="http://#{host}/#{utype}/#{productID}"
        params = { 'Operation'   => 'ItemLookup',
           'ItemId' => productID,
           'ResponseGroup'=>'Large'
          }

    res = req.get(:query => params)
    hsh=Hash.from_xml(res.body)
    @details=hsh
    item=hsh[:ItemLookupResponse][:Items][:Item]#Throws an Undefined method [] for nilClass

正規表現の解析は無視できます。res.body から生成されたハッシュは有効なハッシュであり、レンダリングされた json (@details) で正常に表示されますが、コードでアクセスしようとすると nilClass がスローされます。hsh[:ItemLookupResponse]これは、ハッシュ以外のものを返すためだと思います。しかし、それが何を返しているのかわかりません。:Items にアクセスするにはどうすればよいですか?

4

1 に答える 1

0

[]電話をかけようとしていると表示されている場合NilClassは、そうである可能性が非常に高くなります。その特定の回線[]で、これらの 3 つに電話をかけます

hsh
hsh[:ItemLookupResponse]
hsh[:ItemLookupResponse][:Items]

したがって、そのうちの 1 つは、再び非常に可能性が高いnilです。debugger/repl を使用して、エラー行の直前にブレークポイントを配置し、hsh. 私は pry を使用ます。これを使用すると、最初に wood してから、ブレークポイントが必要な場所にrequire 'pry'配置できます。binding.pry

于 2013-09-10T04:06:05.170 に答える