Un client de geolocalisation en cinq lignes de PHP avec l'API Google Maps
Par NiKo le mardi 29 janvier 2008, 17:16 - Dev
- Lien permanent -
19 commentaires -
Tags :
Google propose des choses vraiment intéressantes au travers de ses API, comme par exemple son méconnu (car planqué dans la doc) webservice HTTP de géolocalisation. L'idée ici est de récupérer la lattitude et la longitude d'un endroit géographique à partir de sa description, par exemple Paris, France ou encore 3 allée des allouettes, 35000 Rennes, France.
Il vous faut posséder au préalable une clé d'API Google, que vous pouvez obtenir gratuitement par là.
<?php define('GOOGLE_API_KEY', 'your_google_api_key_here'); $wsurl = 'http://maps.google.com/maps/geo?q=%s&output=csv&key=%s'; $location = 'Paris, France'; $data = explode(',', file_get_contents(sprintf($wsurl, urlencode($location), GOOGLE_API_KEY))); $coord = 200 === (int)$data[0] ? array((float)$data[2], (float)$data[3]) : null; var_dump($coord);
Ce qui nous donne :
array(2) { [0]=> float(48.856667) [1]=> float(2.350987) }
On prendra soin de cacher autant que faire se peut les résultats renvoyés par le webservice, afin de soulager les serveurs de Google et accessoirement de pas fusiller le crédit-requête associé à sa clé d'API.
Disclaimer : Ce billet n'est pas un appel au troll, je me doute qu'on peut faire la même chose en 3 lignes de Ruby, 2 lignes de Python et -10 lignes de Fotran77. C'est juste pour dire que les services Google, ça déchire quand même un petit peu.
19 commentaires (Ajouter un commentaire)
Excellent !
Moi qui avait pondu un module JS/AJAX/MYSQL pour arriver à mettre en cache de façon optimisée les coordonnées, me voici comblé
Merci pour l'info
Pfff, je fais la même chose avec 4305 ligne de logo (et un peu d'assembleur)...
La géolocalisation, c'est vraiment Google qui l'a démocratisé en associant sa force de frappe (couverture mondiale de sa base) à une compréhension évidente des standards de facto du web : indépendance vis à vis des languages via des API combinée à l'utilisation uniquement de protocoles standards : "HTTP is the answer for (almost) everything".
Merci NiKo pour le tuto
Argh !!! et merci niko, juste en retard de 2 mois pour mon projet de geolocalisation en belgique mais c'est toujours utile a savoir. C'est super rigolo la belgique avec leur code postaux qui referencient des villes qui n'existent plus officiellement.
@tous: désolé, vous êtes quasiment tous partis dans le spam... L'antispam de DC2 est devenu un tantinet tatillon ces derniers temps...
Olivier> Malheureusement pour Phoogle, que j'ai déjà vu passer, j'ai regardé le code source... Oui, je suis chiant.
Guy> Ces derniers temps je taquine un peu le Python à travers Django et force est de constater que je trouve ça pas mal du tout (sauf l'absence de réflexion des urls, sujet sur lequel je m'épancherai peut-être dans un prochain billet).
... Et pis aussi je ne lis pas les commentaires qui viennent d'être écrits des fois pasqu'il est un peu tard (hum hum) donc autant pour moi pour la paraphrase
Je ne ferme jamais mes balises PHP (à part dans les templates).
ça évite d'avoir des espages qui trainent en fin de fichier et qui sont balancés sur la sortie, donc finalement bien pratique.
Un corollaire du disclaimer pourrait être : "les API, c'est un très bon moyen de ne pas réinventer la roue (DRY), et de profiter de la force de frappe des fournisseurs de services web pour fournir des fonctionnalités puissantes à vos développements à moindre coût **QUEL QUE SOIT LE LANGAGE** - et JE ME FOUS DE SAVOIR CELUI QUE TU PRÉFÈRES".
Ce qui est vraiment génial, c'est quand les APIs s'utilisent aussi facilement que des éléments du langage, via des modules. C'est ce genre de briques qui ont d'ailleurs été à l'origine des frameworks web, pour permettre l'encapsulation successive de services de plus en plus "haut niveau". Plus le niveau d'abstraction est haut, plus le développeur avancera vite et économisera son temps et son énergie à fabriquer autre chose.
Python n'est pas comparable à PHP sur ce plan-là.
PHP est un langage de scripts web from scratch. Le postulat est que le fichier à parser est une page html avec, éventuellement, du php. Afin que le parser de l'exécuteur PHP sache ce qui doit être parsé de ce qui ne doit pas l'être, il y a les balises. En PHP, ca donne donc <?php ... ?> alors qu'en ASP c'est <% ... %> en ASP.
Or, Python est un langage non destiné au web mais qui peut être utilisé pour le web, nottament avec Zope. Et Zope ne part du postulat que les pages sont des pages html avec du python dedans, mais bel et bien du full python, qui générerons de html.
Et sinon, pour titiller le python depuis quelques temps déjà, il n'y a pas de quoi être fier de Python. Sous ses airs sympatoches, c'est un langage totalement rustiné, immature et ayant l'immense paradoxe d'avoir des fonctionnalités avancées fortemment interressantes (les compréhensions de listes entre autre) et des fonctionnalités basiques totalement absente pour des raisons obscures ou bien présentes mais implémentées de manière tout a fait incongru (la POO par exemple).
/me se couchera moins bête ce soir mais je trouve ça pour le moins étrange... et quand bien même...
Dans la limite de 620 géoloc/heure/API-KEY.
Sinon effectivement bien pratique.
Oh, et en passant, c'est Fo*r*tran 77
Moi qui faisait tout un paté de javascript pour obtenir la lattitude et la longitude ^^.
NiKo, tu apprecieras : http://www.symfonylab.com/phoogle-u... et http://www.symfonylab.com/phoogle-u...
++
Je sais que mon commentaire ne sera pas très pertinent, mais j'aime bien la chute " je me doute qu'on peut faire la même chose en 3 lignes de Ruby, 2 lignes de Python et -10 lignes de Fotran77"
Tu roxes NiKo
(et l'API google aussi)
jte hais niko.
le ?> n'est pas obligatoire, et j'irai meme jusqu'a dire que dans un fichier qui ne contient que du php, c'est une bonne pratique de l'omettre, ça évite les espaces qui se balladent on ne sait où
NiCoS> Depuis php5, tu n'as plus besoin de fermer les tags PHP si tu n'as que du php jusqu'à la fin du fichier. Ça évite les headers already sent s'il subsiste un espace après le tag fermant.
Le plus grave, il te manque le "?>"
Ah cette syntaxe PHP... dans python par ex, y a pas