Как получить более 10 результатов для запроса с использованием YQL? - PullRequest
6 голосов
/ 07 июня 2011

Я пытаюсь использовать YQL в php для получения информации о продукте из Amazon, используя таблицу amazon.prodlist и API рекламы продуктов Amazon.

Запрос, который я использовал:

select * from amazon.prodlist where Title='harry potter' and SearchIndex='Books' and ResponseGroup='Images,ItemAttributes'

Возвращает только 10 результатов. Как я могу заставить его отображать более 10 результатов на одной странице? Также без нумерации страниц.

Полный код PHP:

<?php
$BASE_URL = "https://query.yahooapis.com/v1/public/yql";

$key="my_key";
$secret="my_secret";
$title="harry potter";
$sindex="Books";
$rgroup="Images,ItemAttributes";
$events="";


// Form YQL query and build URI to YQL Web service
$yql_query = "use 'http://www.datatables.org/amazon/amazon.ecs.xml' as amazon.prodlist;
set AWSAccessKeyId='$key' on amazon.prodlist;
set secret='$secret' on amazon.prodlist; 
select * from amazon.prodlist where Title='$title' and SearchIndex='$sindex' and ResponseGroup='$rgroup' ";

$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json";

// Make call with cURL
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
$json = curl_exec($session);
// Convert JSON to PHP object 
$phpObj =  json_decode($json);

// Confirm that results were returned before parsing
if(!is_null($phpObj->query->results)){
  // Parse results and extract data to display
  foreach($phpObj->query->results->Item as $event){
    $events .= "<div><h2>" . $event->ItemAttributes->Title . " by " . $event->ItemAttributes->Author . "</h2></div>";
}
}
// No results were returned
if(empty($events)){
  $events = "Sorry, no events matching result";
}
// Display results and unset the global array $_GET
echo $events;
unset($_GET);

?>

Показывает 10 результатов на странице. Принимая во внимание, что, когда я ищу «Гарри Поттер» в «Книгах» на сайте Amazon, я получаю более 3 000 результатов. Есть ли способ получить все результаты на одной странице? Пожалуйста, сообщите.

1 Ответ

3 голосов
/ 08 июня 2011

Таблица открытых данных amazon.ecs (на момент написания вашего вопроса) не поддерживает разбиение на страницы результатов, поэтому вы застряли только с получением 10 элементов.Это общий упущение со стороны автора открытой таблицы данных.

Я исправил источник таблицы данных в своем собственном форке репозитория таблиц YQL и выдал запрос на извлечение ( здесь ) надеюсь вернуть изменения в основные источники.После этого вы сможете использовать синтаксис table.name([offset,]count) ( документы ), чтобы получить больше (или меньше!) Результатов.

Если вы хотите сразу же приступить к работе,нужно изменить URL-адрес таблицы данных, чтобы указать мои изменения в специальной ветке только для этого вопроса:

https://github.com/salathe/yql-tables/blob/so-6269923/amazon/amazon.ecs.xml

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

use 'https://raw.github.com/salathe/yql-tables/so-6269923/amazon/amazon.ecs.xml' as amazon.prodlist;
use AWSAccessKeyId='my_access_key' on amazon.prodlist;
use secret='my_secret' on amazon.prodlist; 

select *
from amazon.prodlist(50) 
where Title='harry potter' 
  and SearchIndex='Books' 
  and ResponseGroup='Images,ItemAttributes';

Когда (если ... следить за запросом на получение ) измененияВернувшись в основной репозиторий таблиц YQL, вы сможете вернуться к использованию http://www.datatables.org/amazon/amazon.ecs.xml URL.

...