2017-04-04 1 views
0

J'essaie d'obtenir les 50 premiers résultats de l'API Google CSE avec le code PHP suivant. Le problème est qu'il combine les deux pages sow les résultats sont foirés comme la première position est celle de la première page et la deuxième position est la deuxième de la deuxième page et ainsi de suite. Quelqu'un peut-il me dire ce que je fais mal ici? Ce que je veux réellement faire est d'obtenir les 50 premiers résultats dans un tableau, mais le code ci-dessous me donne des résultats mitigés.CSE Google page personnalisée api show 50 résultats PHP?

$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); 

Répondre

1

Il semble que vous ajoutez chaque série de 10 résultats dans un tableau séparé, de sorte postes1 de $ a les 10 premiers résultats, envois2 de $ a les 10, etc. Si vous voulez que tous les 50 résultats en une seule array, il n'est pas nécessaire d'utiliser un index dans le nom du tableau.

En outre, le paramètre "start" est le numéro du résultat souhaité, pas le numéro du jeu de résultats. Vous voulez donc que la première requête commence à 1, la seconde démarre à 11, la troisième à 21

Vous pouvez également vérifier qu'il y a quelque chose dans le résultat avant de l'ajouter à votre tableau.

je pourrais faire quelque chose de plus comme ceci:

$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); 

Enfin, un couple: mises en garde de

  • Il y a an existing question de savoir si ce api JSON est dépréciée et peut-être aller loin.
  • Chaque requête pour les 10 prochains résultats compte dans votre quota. Si vous avez peur de manquer de requêtes chaque mois ou si vous payez pour des augmentations de quota, vous voudrez peut-être envisager de récupérer uniquement ce dont vous avez besoin.
+0

Nous vous remercions de votre réponse et des précisions sur la v1 obsolète. Lorsque vous utilisez cette méthode, elle retourne dans un tableau vide. – Jan

+0

Aussi lors de l'enregistrement de la requête $, il donne l'adresse correcte, mais le tableau reste vide. – Jan

+0

Premièrement: il y a une mise à jour sur l'API JSON/REST: http://stackoverflow.com/questions/43041894/google-cse-rest-api-is-v1-deprecated-is-there-a-v2 –