Поиск в Amazon возвращает только 10 товаров - PullRequest
3 голосов
/ 06 апреля 2010

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

1 Ответ

3 голосов
/ 23 апреля 2011

Я предполагаю, что вы используете операцию ItemSearch из API рекламы продуктов Amazon.

Ваш запрос должен выглядеть следующим образом:

http://ecs.amazonaws.com/onca/xml?
Service=AWSECommerceService&
AWSAccessKeyId=[AWS Access Key ID]&
Operation=ItemSearch&
Keywords=Edward%20Tufte&
SearchIndex=Books
&Timestamp=[YYYY-MM-DDThh:mm:ssZ]
&Signature=[Request Signature]

Это должно вернуть ответ, который выглядит следующим образом:

<TotalResults>132</TotalResults>
<TotalPages>14</TotalPages>
<Item>
  <ASIN>...</ASIN>
  <DetailPageURL>...</DetailPageURL>
  <ItemAttributes>...</ItemAttributes>
</Item>
<Item>
  <ASIN>...</ASIN>
  <DetailPageURL>...</DetailPageURL>
  <ItemAttributes>...</ItemAttributes>
</Item>
<Item>
  <ASIN>...</ASIN>
  <DetailPageURL>...</DetailPageURL>
  <ItemAttributes>...</ItemAttributes>
</Item>
...

Результаты поиска по элементам разбиты на страницы; Приведенный выше запрос вернет элементы с 1 по 10 (соответствует странице 1). Чтобы получить дополнительные результаты, вам нужно запросить другую страницу результатов. С помощью операции Amazon ItemSearch вы можете сделать это, указав параметр itemPage.

Вот код sudo, который извлекает все книги «Эдварда Туфте» или около них, доступные на Amazon (до 400 страниц результатов):

keywords="Edward Tufte"

# itemSearch will create the Amazon Product Advertising request
response=itemSearch(Keywords=keywords, SearchIndex="Books")
# Do whatever you want with the response for the first page
...

# getTotalPagesFromResponse will parse the XML response and return the totalPages
# (14 in the above example). 
totalPages = getTotalPagesFromResponse(response)
If totalPages > 1
  # Note that you cannot go beyond 400 pages (see [1])
  # Or you can limit yourself to a smaller number of pages
  totalPages=min(400,totalPages)

  page=2
  while page < totalPages
    response=itemSearch(Keywords=keywords, SearchIndex="Books", ItemPage=page)
    # Do whatever you want with the response
    ...
    page=page+1

Справка: [1] ItemSearch Amazon Product Documentation (доступно по адресу http://docs.amazonwebservices.com/AWSECommerceService/2010-11-01/DG/ItemSearch.html)

...