2011-06-07 13 views
6

Estoy tratando de usar YQL en php para obtener información del producto de Amazon usando la tabla amazon.prodlist y la API de Amazon Product Advertising.¿Cómo obtener más de 10 resultados para una consulta con YQL?

La consulta que he utilizado:

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

sólo devuelve 10 resultados. ¿Cómo puedo obtener que muestre más de 10 resultados en la misma página? Además, sin paginación.

El código PHP completo:

<?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); 

?> 

Esta muestra 10 resultados en una página. Mientras que cuando busco 'harry potter' en 'Libros' en el sitio web de Amazon, obtengo más de 3k resultados. ¿Hay alguna manera de obtener todos los resultados en una sola página? Por favor avise.

+0

Lea [la documentación] (http://developer.yahoo.com/yql/guide/paging.html) quizás? – Wrikken

+0

Ya lo leí e intenté cambiar la consulta a: 'select * from amazon.prodlist (20) donde Title = '$ title' y SearchIndex = '$ sindex' y ResponseGroup = '$ rgroup'', ' select * de amazon.prodlist (0) donde Title = '$ title' y SearchIndex = '$ sindex' y ResponseGroup = '$ rgroup'', 'select * from amazon.prodlist (0) donde Title =' $ title ' y SearchIndex = '$ sindex' y ResponseGroup = '$ rgroup' limit 20' Pero sigo recibiendo solo 10 resultados. ¿Cualquier otra sugerencia? –

+0

OK, no tengo mucha experiencia con Amazon o YQL, así que lo dejo a los demás, la próxima vez que menciones ese pequeño hecho, ahorra tiempo a la gente :) – Wrikken

Respuesta

3

La tabla de datos abiertos amazon.ecs (en el momento de escribir su pregunta) no es compatible con la búsqueda de resultados, por lo que solo puede recuperar los 10 elementos. Esta es una supervisión común por parte del autor de la tabla de datos abiertos.

He modificado el origen de la tabla de datos en mi propia bifurcación del repositorio de tablas YQL, y he emitido una solicitud de extracción (here) para poder recuperar los cambios en las fuentes principales. Luego podrá usar la sintaxis table.name([offset,]count) (docs) para obtener más (¡o menos!) Resultados.

Si quiere poner en marcha de inmediato, entonces usted necesita para cambiar la dirección URL de la tabla de datos para señalar en mis cambios en una rama especial sólo para esta pregunta:

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

su consulta completa sería algo como lo siguiente ( muy similar a la consulta existente):

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'; 

Cuando (si ... esté atento al pull request) los cambios se llevan de vuelta al repositorio principal de tablas YQL, podrá volver al uso de la URL http://www.datatables.org/amazon/amazon.ecs.xml.

+1

¡Muchas gracias! ¡Intenté la consulta en la consola yql, funciona sin problemas! Enfrentando algunos errores cuando utilizo la misma consulta en el código php anterior pero con suerte los resolveré. ¡prestigio! –

+0

Buena suerte, Paras. :) – salathe

+1

Buenas noticias, los cambios se llevaron a las principales tablas YQL. Puede volver a usar 'http: // www.datatables.org/amazon/amazon.ecs.xml'. – salathe

Cuestiones relacionadas