我正在浏览ItemLookupRequest
可以选择使用标记页来浏览结果集,但在WSDL中没有标记页选项。我遇到的问题是 Itemlookup只返回10个结果。如何在不使用标签页选项的情况下翻阅结果集?
非常感谢你的帮助
我的目标是将ISBN传递给亚马逊并获得该书所售出的所有价格。看起来我只能收到10个随机价格。如果他们将我的回报限制在10个价格而不让我做某种形式的分页,我怎么能得到所有的价格
答案 0 :(得分:0)
根据ItemId文档,每个请求最多只能指定10个唯一的ItemIds。因此,对于每个ItemLookupRequest请求,每个请求最多可返回10个项目。自从我使用这个API以来已经有一段时间了,但是当我使用它时,他们正在努力推动您尽可能积极地缓存除定价之外的产品信息。这可能是它们迫使客户端通过其API设计进行缓存的方式之一。
项目Id
唯一标识项目的一个或多个(最多十个)正整数。数字的含义由IdType指定。也就是说,如果IdType是ASIN,则ItemId值是ASIN。如果ItemIdis是ASIN,则无法在请求中指定搜索索引。
类型:字符串
默认值:无
约束:必须是有效的商品ID。对于多个ID,请使用最多包含十个ID的逗号分隔列表。
答案 1 :(得分:0)
亚马逊网络服务代码可能很难导航。在查看您发布到ItemLookupRequest的链接时,您是否尝试过此链接(从请求参数中提取)?
RelatedItemPage :此可选参数仅在使用RelatedItems响应组时有效。每个ItemLookup请求最多可以返回十个相关项。 RelatedItemPage值指定要返回的十个相关项的集合。例如,值2返回第二组十个相关项
答案 2 :(得分:0)
您可以使用ItemPage参数迭代ItemSearchResult的页面,并使用“Sort”参数对项目进行排序(而不是“随机”;这实际上是最“相关”)。
这是一个我刚刚一起扔的未经测试的snippit,而不是我之前做过的事情,但是应该有效。您需要执行比我在此处所做的更多错误处理,并且还要满足AWS对您施加的每秒最大请求数量:
private List<Item> testAWS() {
var s = new AWSECommerceServicePortTypeClient("AWSECommerceServicePortUK");
s.ChannelFactory.Endpoint.Behaviors.Add(new AmazonSigningEndpointBehavior(AWSAccessKey, AWSSecureKeyID));
var totalPages = 10; // Default value - changes on first iteration
var books = new List<Item>();
for(var i = 1; i < totalPages; i++) {
var req = new ItemSearchRequest {
SearchIndex = "Books",
ItemPage = i.ToString(CultureInfo.InvariantCulture),
Keywords = "Your ISBN", // There may be a better way to search for an ISBN - I haven't yet needed to
Sort = "price", // Sort depends on which endpoint you are searching.
Availability = ItemSearchRequestAvailability.Available, // Gets available products (mainly)
ResponseGroup = new[] { "Small" } // Change for more details
};
var search = new ItemSearch {
AWSAccessKeyId = AWSAccessKey,
AssociateTag = AWSAssociateTag,
Request = new[] { req }
};
var response = s.ItemSearch(search);
// Store response in a list or something, which you can reorder as you want
books.AddRange(response.Items[0].Item);
totalPages = int.Parse(response.Items[0].TotalPages ?? "0");
}
// return your books, ordered by price ascending
return books.OrderBy(b => b.Offers.Offer[0].OfferListing[0].Price.Amount).ToList();
}