Accès API google map, failed to open stream

Fermé
Hefthyn Messages postés 6 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 1 février 2015 - 25 janv. 2015 à 16:27
Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - 4 mars 2015 à 15:24
Bonjour,


Je suis actuellement en train de développer une partie d'une site internet qui va permettre la géolocalisation de certains lieu sur une carte. Ces lieux sont présent en base de donnée et sont entrés par des utilisateurs grâce à leur adresse. De mon côté, je dois transformer ces adresses en longitude et latitude afin de pouvoir les placer correctement.
J'utilise donc cette API que fourni google et qui permet, grâce à une adresse et retourner un paquet d'informations de localisation :
http://maps.googleapis.com/maps/api/geocode/json?address=votre_adresse,sensor=true

Quand j'y accède manuellement via mon navigateur, je n'ai aucun problème pour retrouver les informations dont j'ai besoin, seulement, lorsque j'essaye de le faire via du code afin d'automatiser la chose, je me retrouve avec une erreur :
Warning: file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address= 45 Bd H. Bazin,21002 Dijon&sensor=true): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in C:\wamp\www\papa\majbd.php on line 23

voici mon code :

$connexion = new PDO("mysql:host=localhost" . ';dbname=' . "geo_stage", "root", "");

$sql = 'SELECT * FROM institution';    
$req = $connexion->query($sql);

while ($data = $req->fetch(PDO::FETCH_ASSOC))
{
	if ($data['longi'] == 0)
	{	
		$adresse = "http://maps.googleapis.com/maps/api/geocode/json?address= "
					.$data['rue'] ."," 
					.$data['CP'] . " "
					.$data['ville']. "&sensor=true";
		echo $adresse;		
	
		// obtention du contenu retourné par l'API google.
		$json = file_get_contents($adresse,false);
		$lat =0;
		$long =0;
		
		if ($json != FALSE)
		{
			$jsondecode = json_decode($json,true); // décode le JSon
				if ($jsondecode['status']=='OK') // indique que l'adresse a été trouvée
				{
$resLoc = $jsondecode['results'][0]['geometry']['location'];
				$lat = $resLoc['lat']; // récupération de la latitude
				$long = $resLoc['lng']; // récupération de la longitude
				
				echo $lat;
				}
		}

	}


J'ai vérifié mon php.ini et la variable "allow_url_fopen" est bien à "on".

J'ai aussi essayé de rajouter un context à file_get_context() que voici :
$context = stream_context_create(array(
  'http' => array(
     'ignore_errors'=>true,
     'method'=>'GET'
   )
));

Mais ça ne fait que cacher l'erreur et ne m'avance en rien.

J'ai aussi essayé d'encoder mon url de la manière suivante :
$json = file_get_contents(urlencode($adresse),false);

mais à part changer l'adresse envoyée à l'API, je récupère le même message d'erreur.

Avez-vous des idées pour résoudre mon problème?

Merci d'avance.
A voir également:

2 réponses

Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
27 janv. 2015 à 17:09
file_get_contents() est une fonction qui retourne le contenu d'un fichier. Pour le lire il faut qu'elle puisse le télécharger, et la sécurité des serveurs de Google empêche cela.

La seule solution que je vois, c'est que le php écrit une ligne de js avec l'adresse géographique recherchée, et ce js va appeler l'API de Google pour récupérer le json, puis ensuite mettre à jour l'affichage des latitude et longitude.

Si par la suite du dois traiter ces données avec php, faudra passer par de l'ajax.

Bon courage !
0
Hefthyn Messages postés 6 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 1 février 2015
1 févr. 2015 à 13:11
Ce que je ne comprends pas, c'est que j'avais utilisé exactement le même code l'année dernière pour un autre projet et je n'avais eu aucun soucis.

Après il est vrai que j'avais utilisé ce code dans un projet développé avec Drupal 7 et que j'avais créer un module à part, mais je doute que ça change grand chose. A moins que le dit projet possédait une clé pour l'API google map, ce qui me donnait le droit de récupérer le code JSON ?
0
Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
4 mars 2015 à 15:24
C'est très probable que la clé de l'API soit la solution ! Au moins ça permet de dire à Google qu'on est un utilisateur enregistré. Mais je ne sais pas faire pour l'utiliser avec du PHP.
0