2012-07-06 1 views
-1

Voici un code simple que j'essaie de lancer mais qui ne contient aucune donnée. Quelqu'un pourrait-il aider? Merci!!Comment extraire plusieurs données de google maps en utilisant php et curl?

<?php 

$addr = "Hotels in ottawa canada"; 
$a = urlencode($addr); 
$geocodeURL = 
"https://maps.googleapis.com/maps/api/geocode/json?address=$a&sensor=false&key=my key"; 

$ch = curl_multi_init($geocodeURL); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_multi_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 

$geocode = json_decode($result); 

$lat = $geocode->results[$i]->geometry->location->lat; 
$lng = $geocode->results[$i]->geometry->location->lng; 
echo $formatted_address = $geocode->results[$i]->formatted_address; 
echo $geo_status = $geocode->status; 
echo $location_type = $geocode->results[0]->geometry->location_type; 
echo $location_type = $geocode->results[$i]->geometry->premise; 
echo $street_address = $geocode->results[$i]->street_address; 


?> 

Social Classifieds

+0

votre mal en utilisant plusieurs boucles, multi boucle est pour saisir plus de 1 url dans synchronicité, mais il semble que si vous voulez seulement saisir 1 url, pouvez-vous expliquer abit plus –

+0

thnx. Je voudrais que lorsque je donne la contribution "hôtels à Ottawa", il devrait produire les adresses du plus grand nombre possible d'hôtels à Ottawa. Je pense que je voulais dire curl_init. J'ai essayé les gestionnaires multi curl et copié et collé cela, mais j'ai oublié d'apporter les modifications à curl_init et curl_exec. – user1505519

+0

vous pouvez également compter sur Geocoder: https://github.com/willdurand/Geocoder –

Répondre

0

Si vous cherchez à passer plusieurs adresses en parallèle au api google puis analyser les résultats comme l'un, Ive mis en place un petit exemple qui fait exactement cela et fixé votre code multi boucle. J'espère que cela aide.

<?php 
$urls = array(
'http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true', 
'http://maps.googleapis.com/maps/api/geocode/json?address='.urlencode('Hotels').'&sensor=true'); 

$response = curl_get_multi($urls); 

//Handle response array 
foreach($response as $json){ 
    $result = json_decode($json); 
    //echo $result->status.' '; 

    //Iterate each result 
    foreach($result->results as $res){ 
     //lat 
     echo $res->geometry->location->lat.' '; 
     //lng 
     echo $res->geometry->location->lng.' '; 
     //formatted_address 
     echo $res->formatted_address.' '; 
     //location_type 
     echo $res->geometry->location_type.' '; 
     echo '<br/>'; 
    } 
    echo '<hr />'; 
} 

/** 
* Curl multi function 
* 
* @param Array $urls 
* @return Array 
*/ 
function curl_get_multi($urls) { 
    $curly = array(); 
    $result = array(); 

    $mh = curl_multi_init(); 
    foreach ($urls as $id=>$url) { 
     $curly[$id] = curl_init(); 
     curl_setopt($curly[$id], CURLOPT_URL,   $url); 
     curl_setopt($curly[$id], CURLOPT_HEADER,   0); 
     curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curly[$id], CURLOPT_TIMEOUT,  2); 
     curl_setopt($curly[$id], CURLOPT_USERAGENT,  'CurlRequest'); 
     curl_setopt($curly[$id], CURLOPT_REFERER,  $url); 
     curl_setopt($curly[$id], CURLOPT_AUTOREFERER, true); 
     curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true); 

     curl_multi_add_handle($mh, $curly[$id]); 
    } 
    $running = null; 
    do { 
     curl_multi_exec($mh, $running); 
    } while($running > 0); 
    foreach($curly as $id => $c) { 
     $result[$id] = curl_multi_getcontent($c); 
     curl_multi_remove_handle($mh, $c); 
    } 
    curl_multi_close($mh); 
    return $result; 
} 
?> 
+0

Merci Laurent pour la réponse. Je voudrais qu'il répète plusieurs adresses si l'entrée est «Hôtels à Ottawa». À l'heure actuelle, il ne donne qu'un seul résultat pour chaque entrée. Comment pourrais-je résoudre ce problème? – user1505519

+0

J'ai mis à jour ma réponse, vous devez parcourir le tableau des résultats au sein de l'objet, mais je suis sûr que vous ne pouvez pas mettre dans «Hôtels à Ottawa» et attendez tous les hôtels retournés, cette api attend une adresse. –

+0

thnx. c'est ce que je pensais. Avez-vous une idée de la façon dont on pourrait extraire les adresses des hôtels à Ottawa de google? Eh bien, faire une curl multi recherche pour les hôtels en utilisant la recherche sur le Web google http://ajax.googleapis.com/ajax/services/search/web? Je vous donnerais une série de descriptions d'hôtels au hasard, etc pour l'emplacement spécifié, mais je voudrais quelque chose qui ne sort que des adresses ou pourrait le réduire juste aux adresses. merci pour la réponse – user1505519

Questions connexes