2017-04-04 91 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 –

相關問題