我尝试使用以下PHP代码获取Google CSE API的前50个结果。
问题在于它结合了两个页面,结果变得混乱,如第一个位置是第一个页面之一,第二个位置是第二个页面的第二个,依此类推。有人能告诉我这里我做错了什么吗?
我真正想做的是在数组中得到前50个结果,但下面的代码给出了混合结果。
$apiKey = "theapikey";
$query = "news";
for ($i = 1; $i <= 5; $i++) {
$ch = curl_init();
$request = "https://www.googleapis.com/customsearch/v1?q=" . urlencode( "$query" ) . "&cx=013594553343653397533:q-qkkaltmay" ."&key=" . $apiKey . "&start=" . $i;
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($ch);
$output = json_decode($output);
foreach( $output->items as $result ) {
$url = $result->link;
${"items" . $i}[] = $url;
}
}
echo json_encode($items1);
答案 0 :(得分:1)
看起来你将每组10个结果添加到一个单独的数组中,所以$ items1有前10个结果,$ items2有接下来的10个等等。如果你想在一个数组中得到所有50个结果,那么无需在数组名称中使用索引。
此外,&#34;开始&#34;参数是您想要的结果编号,而不是结果集的编号 - 因此您希望第一个查询从1开始,第二个查询从11开始,第三个查询从21开始,等等。
您可能还想在将结果添加到数组之前检查结果中是否存在某些内容。
我可能会做更多这样的事情:
$apiKey = "theapikey";
$query = "news";
$items = array();
for ($i = 1; $i <= 5; $i++) {
$ch = curl_init();
$request = "https://www.googleapis.com/customsearch/v1?" .
"q=" . urlencode( "$query" ) .
"&cx=013594553343653397533:q-qkkaltmay" .
"&key=" . $apiKey .
"&start=" . ( ($i - 1)*10 + 1 );
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($ch);
$output = json_decode($output);
foreach( $output->items as $result ) {
if ($url = $result->link && trim($url)) $items[] = $url;
}
}
echo json_encode($items);
最后,有几点需要注意: