我正在尝试使用php中的YQL来使用amazon.prodlist表和亚马逊产品广告API从亚马逊获取产品信息。
我使用的查询:
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个结果。然而,当我在亚马逊网站的“书籍”中搜索“哈利波特”时,我获得了超过3k的结果。有没有办法在一个页面上获得所有结果?请指教。
答案 0 :(得分:3)
amazon.ecs
打开数据表(在撰写问题时)不支持对结果进行分页,因此您只能检索10个项目。这是开放数据表作者的一个常见疏忽。
我已经在我自己的YQL表存储库的fork中修改了数据表源,并发出了一个pull请求(here),希望将更改恢复到主要的源代码中。然后,您就可以使用table.name([offset,]count)
语法(docs)来获得更多(或更少!)的结果。
如果您想立即启动并运行,那么您需要将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';
当(如果...密切注意pull request)更改被拉回主YQL表存储库时,您将能够返回使用http://www.datatables.org/amazon/amazon.ecs.xml URL。 / p>