【问题标题】:Return Product Data from Amazon Product API Using R使用 R 从亚马逊产品 API 返回产品数据
【发布时间】:2020-02-26 11:24:06
【问题描述】:

我想使用 R 从Amazon Product API 中提取产品信息。正如this threadAmazon's Signed Requests Helper 所建议的,我正在使用以下R 代码:

library("RCurl")

nvp <- list("Service"="AWSECommerceService",
            "Version"="2011-08-01",
            "AssociateTag"="PutYourAssociateTagHere",
            "Operation"="ItemSearch",
            "SearchIndex"="Books",
            "Keywords"="harry+potter",
            "Timestamp"="2020-02-26T11:25:14.000Z",
            "AWSAccessKeyId"="XXX")                    # "XXX" needs to be replaced by the Access Key

getURL(nvp)

# AWSECommerceService               2011-08-01  PutYourAssociateTagHere               ItemSearch                    Books             harry+potter 2020-02-26T11:25:14.000Z                      XXX 
#                  ""                       ""                       ""                       ""                       ""                       ""                       ""                       "" 

如您所见,getURL 函数只是返回空字符。经过数小时的搜索,无论我如何更改先前代码的参数,我仍然无法获得任何其他输出。

如何修改之前的代码以从亚马逊产品 API 返回产品数据?

【问题讨论】:

    标签: r amazon-web-services api


    【解决方案1】:

    查看您提供的Signed Requests Helper,示例url如下:

    http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&Version=2011-08-01&AssociateTag=PutYourAssociateTagHere&Operation=ItemSearch&SearchIndex=Books&Keywords=harry+potter
    

    因此需要对您上面提供的 nvp 列表进行一些修改。这些变化是: 1.将每个参数放在一个字符串中(例如'Version = 2011-08-01',而不是'version' = '2011-08-01' 2. 确保格式化映射(例如在示例 URL 中,Version 以 &,所以我们确保添加了这个。 3. 最后,我们需要一个基本 url 来粘贴它(这是服务之前的示例 url 中的所有内容)。

    nvp = c("Service=AWSECommerceService",
           "&Version=2011-08-01",
           "&AssociateTag=PutYourAssociateTagHere",
           "&Operation=ItemSearch",
           "&SearchIndex=Books",
           "&Keywords=harry+potter",
          "&Timestamp=2020-02-26T11:25:14.000Z",
          "&AWSAccessKeyId = XXX")
    base_url = "http://ecs.amazonaws.com/onca/xml?"
    

    然后我们需要将 base_url 和 nvp 粘贴在一起来制作我们的 url

    amazon_url = paste0(base_url, paste(nvp, collapse=''))
    

    这给出了我们可以传递给 getURL 的 url。如果您传递关联标签/AWS 访问密钥 ID,这些应该可以工作,我目前收到“必须包含 AWS 访问密钥 ID 错误”。

    [这显然是一种非常手动的方法,如果您想在搜索方面更加程序化,您可以这样做:

    AWSAccessKeyID = '1234'
    keywords = 'harry+potter'
    

    这些可以传递给粘贴,稍作修改

    nvp = list("Service=AWSECommerceService",
                   "&Version=2011-08-01",
                   "&AssociateTag=PutYourAssociateTagHere",
                   "&Operation=ItemSearch",
                   "&SearchIndex=Books",
                   "&Keywords=", keywords,
                   "&Timestamp=2020-02-26T11:25:14.000Z",
                   "&AWSAccessKeyId=" AWSAccessKeyID 
                    )
    amazon_url = paste0(base_url, paste(nvp, collapse=''))
    

    ]

    【讨论】:

    • 非常感谢您的详细回复。不幸的是,当我使用您的代码时,我收到了错误消息MissingParameter - The request must contain the parameter Signature.。当我按照here 的建议添加签名时,我收到错误消息RequestThrottled - You are submitting requests too quickly. Please retry your requests at a slower rate. This 线程点最低销售额。但是,我们肯定会产生足够的销售额。
    • 这是新的密钥对吗?亚马逊支持团队的回复似乎说他们在注册后需要 48 小时才能工作(假设您需要销售)。我想如果您的签名/密钥完全错误,它会发送一个无效的签名错误......您是否尝试过重新运行?
    • 感谢您回复我!密钥已超过 1 年,因此这不是原因。我们还设法使用 Python 访问 API,因此密钥绝对不是问题。如果您有任何进一步的建议,请告诉我,因为我更喜欢使用 R 而不是 Python。
    • 只是一个想法;如果您在签名请求助手中输入您的密钥和秘密访问密钥,URL 是什么样的? (您可以在上面的 Signed Requests Helper 链接中执行此操作。您可能需要删除您的签名,但您可以将网站上的签名外观与您的代码生成的签名进行比较?
    • 澄清一下;您将您的关联标签放入 AssociateTag 参数(nvp 的第三行),然后将您签名的 AWS 密钥放入您的 AWSAccessKeyId 参数?抱歉,我之前没有使用过这个 API,因此很难解决......
    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多