使用R从Amazon产品API返回产品数据

使用R从Amazon产品API返回产品数据,r,amazon-web-services,api,R,Amazon Web Services,Api,我想使用R从中提取产品信息。根据和的建议,我使用以下R代码: library("RCurl") nvp <- list("Service"="AWSECommerceService", "Version"="2011-08-01", "AssociateTag"="PutYourAssociateTagHere", "Operation"="ItemSearch", "SearchIndex"

我想使用R从中提取产品信息。根据和的建议,我使用以下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 
#                  ""                       ""                       ""                       ""                       ""                       ""                       ""                       "" 
库(“RCurl”)
nvp查看您提供的示例url,示例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中,版本前面有 &,因此,我们确保已添加此项。 3.最后,我们需要一个基本url将其粘贴到上面(这是服务前示例url中的所有内容)

然后,我们需要将基本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-请求必须包含参数签名。
当我使用您的代码时。当我按照建议添加签名时,我收到了错误消息
RequestThrottled-您提交请求太快了。请重试您的请求以较慢的速度。
线程指向最低销售额。但是,我们确实产生了足够的销售额。这是一个新的密钥对吗?亚马逊支持团队的回复似乎表示,他们在注册后花了48小时才开始工作(假设您需要销售)。我想如果你的签名/密钥完全错误,它会发送一个无效的签名错误…你试过重新运行吗?谢谢你回复我!密钥已超过1年,因此这不是原因。我们还使用Python访问API,因此密钥绝对不是问题。如果你有任何问题,请告诉我进一步的建议,因为我更喜欢使用R而不是Python?(您可以在上面的Signed Requests Helper链接中执行此操作。您可能需要删除您的签名,但您可以将该签名在网站上的外观与代码生成的签名进行比较?为了澄清这一点,您将两个AssociateTag标记都放入AssociateTag参数(nvp的第三行),然后将已签名的AWS密钥插入AWSAccessKeyId参数?抱歉,我以前没有使用过此API,因此很难解决此问题。。。
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=''))