我一直在玩亚马逊的产品广告API,我不能得到一个请求,通过给予我的数据。我一直在工作了这个:http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/GSG/和这个:Amazon Product Advertising API signed request with Java
下面是我的代码。我使用以下代码生成了SOAP绑定:http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/GSG/YourDevelopmentEnvironment.html#Java
在类路径上,我只有:commons-codec.1.5.jar
import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.Item;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupRequest;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemSearchResponse;
import com.ECS.client.jax.Items;
public class Client {
public static void main(String[] args) {
String secretKey = <my-secret-key>;
String awsKey = <my-aws-key>;
System.out.println("API Test started");
AWSECommerceService service = new AWSECommerceService();
service.setHandlerResolver(new AwsHandlerResolver(
secretKey)); // important
AWSECommerceServicePortType port = service.getAWSECommerceServicePort();
// Get the operation object:
com.ECS.client.jax.ItemSearchRequest itemRequest = new com.ECS.client.jax.ItemSearchRequest();
// Fill in the request object:
itemRequest.setSearchIndex("Books");
itemRequest.setKeywords("Star Wars");
// itemRequest.setVersion("2011-08-01");
com.ECS.client.jax.ItemSearch ItemElement = new com.ECS.client.jax.ItemSearch();
ItemElement.setAWSAccessKeyId(awsKey);
ItemElement.getRequest().add(itemRequest);
// Call the Web service operation and store the response
// in the response object:
com.ECS.client.jax.ItemSearchResponse response = port
.itemSearch(ItemElement);
String r = response.toString();
System.out.println("response: " + r);
for (Items itemList : response.getItems()) {
System.out.println(itemList);
for (Item item : itemList.getItem()) {
System.out.println(item);
}
}
System.out.println("API Test stopped");
}
}
以下是我得到的...我希望看到一些星星大战的书籍可以在亚马逊倾倒到我的控制台:-/:
API Test started
response: com.ECS.client.jax.ItemSearchResponse@7a6769ea
com.ECS.client.jax.Items@1b5ac06e
API Test stopped
我做错了什么(注意,第二个for循环中没有“item”被打印出来,因为它是空的)?我如何解决这个问题或获得相关的错误信息?
4条答案
按热度按时间2w2cym1i1#
我不使用SOAP API,但您的Bounty需求并没有说明它必须使用SOAP,只有当您想调用Amazon并获得结果时才能使用。因此,我将使用REST API发布这个工作示例,它至少可以满足您的需求:
我想一些工作示例代码,击中亚马逊服务器,并返回结果
您需要下载以下文件以满足签名要求:
http://associates-amazon.s3.amazonaws.com/signed-requests/samples/amazon-product-advt-api-sample-java-query.zip
解压缩并获取
com.amazon.advertising.api.sample.SignedRequestsHelper.java
文件,然后将其直接放入您的项目中。您还需要从下面下载Apache Commons Codec 1.3并将其添加到您的类路径中,即添加到您项目的库中。注意,这是Codec的唯一版本,可以与上述类(
SignedRequestsHelper
)一起使用。http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.3.zip
现在,您可以复制并粘贴以下内容,确保使用正确的软件包名称替换
your.pkg.here
,并替换SECRET
和KEY
属性:正如你所看到的,这比SOAP API更容易设置和使用,如果你对使用SOAP API没有特殊的要求,那么我强烈建议你使用REST API。
使用API的一个缺点是结果不能被解组为对象,这可以通过基于wsdl创建所需的类来弥补。
dz6r00yl2#
这结束了工作(我不得不添加我的associateTag到请求):
p4tfgftt3#
看起来response对象并没有覆盖toString(),所以如果它包含了某种错误响应,简单地打印它并不能告诉你错误响应是什么。你需要查看API,看看response对象返回了哪些字段,然后单独打印这些字段。要么你会得到一个明显的错误消息,要么你必须回到他们的文档来找出错误。
7tofc5zh4#
您需要调用Item对象上的get方法来检索其详细信息,例如:
如果有任何错误,您可以通过调用getErrors()获取它们