Веб-сервисы Amazon разбивают на страницы с набором результатов - PullRequest
0 голосов
/ 13 марта 2012

Я просматриваю ItemLookupRequest

Существует возможность использовать страницу тегов для постраничного просмотра набора результатов, но в WSDL нет опции страницы тега. У меня проблема Itemlookup возвращает только 10 результатов. Как я могу пролистать результирующий набор без использования опции tagpage?

Большое спасибо за вашу помощь

Моя цель - передать ISBN амазонке и получить ВСЕ цены, по которым продается книга. Похоже, я могу получить только 10 случайных цен. Как я могу получить все цены, если они ограничивают мой возврат до 10 цен и не позволяют мне выполнять какую-либо форму нумерации страниц

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

Код веб-службы Amazon может быть затруднительным для навигации. При просмотре ссылки, которую вы разместили на ItemLookupRequest , вы пробовали эту (извлеченную из параметров запроса)?

RelatedItemPage : этот необязательный параметр действителен только при использовании группы ответа RelatedItems. Каждый запрос ItemLookup может вернуть не более десяти связанных элементов. Значение RelatedItemPage указывает набор из десяти связанных элементов для возврата. Например, значение 2 возвращает второй набор из десяти связанных элементов

0 голосов
/ 19 марта 2012

Вы можете использовать параметр 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();

    }
0 голосов
/ 13 марта 2012

Согласно документации ItemId вы можете указать до 10 уникальных ItemId на запрос. Таким образом, похоже, что у них есть порог на запрос до 10 элементов, возвращаемых на запрос ItemLookupRequest. Прошло некоторое время с тех пор, как я использовал этот API, но когда я использовал его, они настаивали на том, чтобы вы кешировали информацию о товаре, за исключением цен, как можно более агрессивно. Это может быть одним из способов заставить клиента кешировать через свой дизайн API.

ItemId
Одно или несколько (до десяти) целых положительных чисел, которые однозначно идентифицируют элемент. Значение числа определяется IdType. То есть, если IdType равен ASIN, значением ItemId является ASIN. Если ItemId является ASIN, индекс поиска не может быть указан в запросе.

Тип: String

По умолчанию: Нет

Ограничения: должен быть действительным идентификатором элемента. Для более чем одного идентификатора используйте разделенный запятыми список до десяти идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...