Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSE谷歌自定义页面api显示50个结果PHP?_Php_Api_Google Custom Search - Fatal编程技术网

CSE谷歌自定义页面api显示50个结果PHP?

CSE谷歌自定义页面api显示50个结果PHP?,php,api,google-custom-search,Php,Api,Google Custom Search,我试图用下面的PHP代码获得Google CSE API的前50个结果 问题是,它将两个页面合并在一起,结果变得混乱,就像第一个位置是第一个页面的位置,第二个位置是第二个页面的第二个位置,依此类推。有人能告诉我我做错了什么吗 我实际上想做的是得到数组中的前50个结果,但下面的代码给出了混合结果 $apiKey = "theapikey"; $query = "news"; for ($i = 1; $i <= 5; $i++) { $ch = curl_init(); $requ

我试图用下面的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);
$apiKey=“theapikey”;
$query=“新闻”;
对于($i=1;作为$result的$i项){
$url=$result->link;
${“items”。$i}[]=$url;
} 
}
echo json_编码($items1);

看起来您正在将每组10个结果添加到一个单独的数组中,因此$items1具有前10个结果,$items2具有后10个结果,以此类推。如果您希望将所有50个结果都添加到一个数组中,则无需在数组名称中使用索引

另外,“start”参数是您想要的结果的编号,而不是结果集的编号-因此您希望第一个查询从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);
$apiKey=“theapikey”;
$query=“新闻”;
$items=array();
对于($i=1;作为$result的$i项){
如果($url=$result->link&&trim($url))$items[]=$url;
} 
}
echo json_编码($items);
最后,有几点需要注意:

  • 关于这个JSON api是否已被弃用以及是否可能会消失还有很多问题
  • 接下来10个结果的每个查询都将计入您的配额。如果你担心每个月都会出现疑问,或者如果你正在为配额增加付费,你可能只想检索你需要的东西。

感谢您对弃用v1的回答和说明。使用此方法时,它会返回到一个空数组中。此外,在记录$request时,它会给出正确的url,但数组保持为空。第一:JSON/REST api上有更新:第二:您从请求中得到了什么?也就是说,如果您只是在cURL调用之后使用var_dump($output),是否有数据?否则,您将需要调试数据提取。如果存在某种东西,是否有一种称为“项目”的结构?如果您要返回的内容没有结果项,或者是错误,那么您将得到一个空的$result结构。