2017-04-04 100 views
0

我试图用以下PHP代码获得Google CSE API的前50个结果。CSE Google自定义页面api显示50个结果PHP?

问题是,它结合了两个页面播种的结果越来越乱了,就像第一个位置是第一个页面,第二个位置是第二个页面,等等。有人能告诉我我在这里做错了吗?

我实际上想要做的是获得数组中的前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

它看起来像要添加每组的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个结果的每个查询都会计入您的配额。如果您担心每个月的查询用完,或者您正在为配额增加付费,那么您可能只想考虑检索所需的内容。
+0

感谢您对已弃用v1的回答和澄清。当使用这个方法时,它返回一个空数组。 – Jan

+0

另外,当记录$ request时,它会给出正确的url,但数组保持为空。 – Jan

+0

首先:JSON/REST api上有更新:http://stackoverflow.com/questions/43041894/google-cse-rest-api-is-v1-deprecated-is-there-a-v2 –

相关问题