CSE Google Custom Page api显示50个结果PHP?

时间:2017-04-04 08:39:33

标签: php api google-custom-search

我尝试使用以下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);

1 个答案:

答案 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);

最后,有几点需要注意:

  • 关于此JSON API是否已弃用且可能已消失,有an existing question
  • 下一个10个结果的每个查询都会计入您的配额。如果您担心每个月的查询用完,或者您要为配额增加付费,您可能只想考虑检索所需内容。