【问题标题】:CSE Google Custom Page api show 50 results PHP?CSE Google 自定义页面 api 显示 50 个结果 PHP?
【发布时间】:2017-04-04 08:39:33
【问题描述】:

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

【问题讨论】:

    标签: php api google-custom-search


    【解决方案1】:

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

    此外,“开始”参数是您想要的结果的编号,而不是结果集的编号 - 所以您希望第一个查询从 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);
    

    最后,有几点需要注意:

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

    【讨论】:

    • 感谢您对已弃用的 v1.1 的回答和澄清。使用此方法时,它返回一个空数组。
    • 同样在记录 $request 时,它会给出正确的 url,但数组保持为空。
    • 第一:JSON/REST api 有更新:stackoverflow.com/questions/43041894/…
    • 第二:你的请求有什么回报吗?也就是说,如果你只是在你的 cURL 调用之后 var_dump($output) ,那里有数据吗?如果没有,您将需要调试数据的拉取。如果那里有东西,是否有一个称为“项目”的结构?如果您返回的内容没有结果项,或者是错误,您将得到一个空的 $result 结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多