亚马逊网络服务通过结果集进行分页



我正在查看ItemLookupRequest

有一个选项可以使用标记页对结果集进行分页,但在WSDL中没有标记页选项。我遇到的问题是项目查找只返回10个结果。如何在不使用tagpage选项的情况下浏览结果集

非常感谢您的帮助

我的目标是将一个ISBN传递给亚马逊,并收到该书正在销售的所有价格。看起来我只能收到10个随机价格。如果他们将我的退货限制在10个价格,并且不让我进行某种形式的分页

,我如何才能获得所有价格

根据ItemId文档,每个请求最多只能指定10个唯一的ItemId。因此,看起来他们每个请求的阈值是每个ItemLookupRequest请求最多返回10个项目。我已经有一段时间没有使用这个API了,但当我使用它时,他们极力要求你缓存产品信息,除了尽可能激进的定价。这可能是他们通过API设计强制客户端缓存的方式之一。

项目ID
唯一标识项目的一个或多个(最多十个)正整数。数字的含义由IdType指定。也就是说,如果IdType是ASIN,则ItemId值是ASIN。如果ItemId是ASIN,则无法在请求中指定搜索索引。

类型:字符串

默认值:无

限制:必须是有效的项目ID。对于多个ID,请使用最多包含十个ID的逗号分隔列表。

亚马逊网络服务代码可能很难导航。在查看您发布到ItemLookupRequest的链接时,您是否尝试过此链接(从请求参数中提取)?

RelatedItemPage:此可选参数仅在使用RelatedItems响应组时有效。每个ItemLookup请求最多可以返回十个相关项目。RelatedItemPage值指定要返回的十个相关项的集合。例如,值2返回第二组10个相关项

您可以使用ItemPage参数迭代ItemSearchResult的页面,并使用"排序"参数对项目进行排序(而不是"随机";这实际上是最"相关"的)。

这是我刚刚拼凑的一个未经测试的狙击坑,我以前没有做过,但应该有效。你需要做比我在这里做的更多的错误处理,还需要满足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();
    }

最新更新