Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2736 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Communes de France 2012 : L'API intemporel !

 


Trouvez-vous cet API utile ?


 
100.0 %
 2 votes
1.  Oui, j'ai vérifié, Même les villages de Mayotte sont là !
 
 
0.0 %
        0 vote
2.  Non, Yahoo propose la même chose...
 

Total : 2 votes (0 vote blanc)
Ce sondage est clos, vous ne pouvez plus voter
 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Communes de France 2012 : L'API intemporel !

n°2147515
mmike57
Posté le 29-06-2012 à 04:56:22  profilanswer
 

Salut à tous chers lecteurs et contributeurs de http://forum.hardware.fr,
 
Je vous présente un API que j'ai réalisé, ce dernier accepte 5 paramètres en tout.
 
Paramètre cp : le code postal (5 chiffres consécutifs)
Paramètre departement : le code du département (ex: 10, 06, 5, 2A...)
Paramètre ville : un nom de commune (Le, La, Les, Aux, L' et Los sont ignorés en début de chaîne)
Paramètre o : une option (J=JSON , P=PHP)
Paramètre l : une limite (par défaut 30, minimum 1, maximum 199)
 

  • Si vous renseignez seulement cp : L'API renvoie toutes les communes qui ont ce code postal.
  • Si vous renseignez cp et ville : L'API renvoie toutes les communes dont le nom (même partiel) correspond au code postal.
  • Si vous renseignez cp, ville et departement : departement est ignoré.
  • Si vous renseignez ville et departement : L'API renvoie toutes les communes dont le nom (même partiel) correspond au département.
  • Si vous renseignez seulement ville : L'API renvoie un résultat vide.
  • Si vous renseignez seulement departement : L'API renvoie un résultat vide.


Exemples :  
http://youtroc.com/communes/?cp=57320
http://youtroc.com/communes?departement=57&ville=m
http://youtroc.com/communes?d=57&v=s&l=5
http://youtroc.com/communes?o=JSON&cp=57550
 
J'aimerai avoir votre avis sur cet API, la source est disponible sur demande (source PHP).
 
J'aimerai savoir si il est possible grâce à l'option JSON de créer un formulaire pour sélectionner de la manière la plus aisée possible une commune de France parmi les 33904. Pensez vous qu'il est possible d'indiquer sa commune (validée par l'API) en moins de 5 secondes grâce à un formulaire adapté ?
 
Mike


Message édité par mmike57 le 29-06-2012 à 10:21:52
mood
Publicité
Posté le 29-06-2012 à 04:56:22  profilanswer
 

n°2147539
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2012 à 11:04:23  profilanswer
 

Petite remarque : le choix des noms des balises xml n'est pas très heureux je trouve. :/
 
Commune_xxx -> pourquoi pas juste <commune> ? En plus normalement, le nom des balises en xml doit être en minuscule.
 
Idem pour <Nom_2> et <Cp_01>. Ca va pas faciliter le parcours du xml...
 
Pour ces 2 balises, vaudrait mieux un balise qui contient le nom "principal" (ce que tu as fait du reste) et après, une balise qui contient une liste de noms secondaires. Ex :

Code :
  1. <commune>
  2.  <nom>Alzing</nom>
  3.  <autresnoms>
  4.    <nom_secondaire>ALZING</nom_secondaire>
  5.  </autresnoms>
  6.  <latitude>49,277</latitude>
  7.  <longitude>6,553</longitude>
  8.  <cp>57320</cp>
  9.  <autrescp></autrescp>
  10. </commune>
  11. <commune>
  12. ...
  13. </commune>


 
Edit : dommage qu'on ne puisse pas rechercher que sur le nom d'une ville quand on met le bon nom (ou au moins un nb de caractères suffisants). Là, faut spécifier le département :/ Pour traiter ce cas, tu devrais faire une première recherche pourvoir s'il n'existe pas de ville correspondant exactement au nom donné. Si y'en a que qq'unes, tu ne demandes pas le département. Si y'en a trop, tu demandes à l'utilisateur de préciser sa recherche avec le département. ;)
 
Edit 2 : dommage aussi, on ne peux pas utiliser les % et _ comme pattern pour la recherche sur le nom d'une ville. Il semble retirer les % et garder que la 1ère lettre trouvée. Du reste, si je mets http://youtroc.com/www/communes-fr [...] 7&ville=ou   il me sort les villes qui commencent par O mais se moque du u derrière :/


Message édité par rufo le 29-06-2012 à 11:11:06

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147540
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2012 à 11:11:56  profilanswer
 

Question : tu vas tenir à jour la base de données? Doit bien y avoir des communes qui se créent ou qui changent de CP?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147550
mmike57
Posté le 29-06-2012 à 11:54:31  profilanswer
 

Petite remarque : le choix des noms des balises xml n'est pas très heureux je trouve. :/
Réponse : Effectivement, mais je me suis inspiré de http://where.yahooapis.com/geocode [...] d=20193891 ... Je ne pense pas qu'il puisse y avoir de problèmes de compatibilité réellement à cause des majuscules... Mais si c'était le cas, effectivement je passerais en minuscules...
 
Commune_xxx -> pourquoi pas juste <commune> ? En plus normalement, le nom des balises en xml doit être en minuscule.
Réponse : Pour la conversion de la ressource en xml j'utilise un tableau PHP, si bien qu'en PHP on ne peut pas avoir plusieurs valeurs ayant la même clé.. Question d'optimisation en fait... c'est vrai que c'est optimisable sur ce point ... mais en perdant un tout petit peu de rapidité... Et en perdant la correspondance parfaite qui réside actuellement entre la version XML PHP et JSON
 
Pour ces 2 balises, vaudrait mieux un balise qui contient le nom "principal" (ce que tu as fait du reste) et après, une balise qui contient une liste de noms secondaires. Ex :
Réponse : Il n'y à toujours qu'un seul et unique nom secondaire, ceci est invariant pour toutes les communes de France sans exception...
 
dommage qu'on ne puisse pas rechercher que sur le nom d'une ville quand on met le bon nom (ou au moins un nb de caractères suffisants). Là, faut spécifier le département :/ Pour traiter ce cas, tu devrais faire une première recherche pourvoir s'il n'existe pas de ville correspondant exactement au nom donné. Si y'en a que qq'unes, tu ne demandes pas le département. Si y'en a trop, tu demandes à l'utilisateur de préciser sa recherche avec le département. ;)
Réponse : C'est une idée correcte, mais mon systeme fonctionne en pur PHP et il n'y à pas de base de données. C'est donc difficile d'ouvrir un fichier qui peut faire 300ko, qui indexe environ 1000 communes... Pour le moment le plus gros fichier à ouvrir fait 3ko... Mais pourquoi pas faire ce type de recherche en SQL, ça peut être une idée, mais, le code-postal c'est pratique aussi...
 
dommage aussi, on ne peux pas utiliser les % et _ comme pattern pour la recherche sur le nom d'une ville. Il semble retirer les % et garder que la 1ère lettre trouvée. Du reste, si je mets #URL  il me sort les villes qui commencent par O mais se moque du u derrière :/
Réponse : Je ne vois pas l'utilité de chercher toutes les communes se terminant par... c'est très facilement faisable comme implémentation mais ou est la réelle utilité...? Le moteur de recherche prend la chaîne de caractères d'entrée exemple BILLONVILLE, la décompose en plusieurs parties de cette façon, BIONVILL, BIONVIL, BIONVI, BIONV, BION, BIO, BI, B ... Si le premier ne donne aucun résultat on passe au suivant... jusqu'à renvoyer touts les B... Il ne faut pas taper de communes invalides...
 
Question : tu vas tenir à jour la base de données? Doit bien y avoir des communes qui se créent ou qui changent de CP?
Oui grâce à l'INSEE entre autre, pour le moment la base est plus complète que Yahoo! et Google. Il y à toutes les villes de France, touts les coordonnées géographiques et 99% des codes postaux, chaque ville au moins en à un, certaines en ont 10 ou 20...

Message cité 1 fois
Message édité par mmike57 le 29-06-2012 à 11:59:03
n°2147552
Profil sup​primé
Posté le 29-06-2012 à 11:58:21  answer
 

En haut de chaque message vous avez des icône qui permettent d'inclure automatiquement le message concerné à votre propre message.

n°2147554
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2012 à 12:11:59  profilanswer
 

mmike57 a écrit :

Petite remarque : le choix des noms des balises xml n'est pas très heureux je trouve. :/
Réponse : Effectivement, mais je me suis inspiré de http://where.yahooapis.com/geocode [...] d=20193891 ... Je ne pense pas qu'il puisse y avoir de problèmes de compatibilité réellement à cause des majuscules... Mais si c'était le cas, effectivement je passerais en minuscules...


XML est une norme du w3c qui propose d'ailleurs un outil de validation ;) Il vaudrait donc mieux respecter cette norme.
 

mmike57 a écrit :


Commune_xxx -> pourquoi pas juste <commune> ? En plus normalement, le nom des balises en xml doit être en minuscule.
Réponse : Pour la conversion de la ressource en xml j'utilise un tableau PHP, si bien qu'en PHP on ne peut pas avoir plusieurs valeurs ayant la même clé.. Question d'optimisation en fait... c'est vrai que c'est optimisable sur ce point ... mais en perdant un tout petit peu de rapidité... Et en perdant la correspondance parfaite qui réside actuellement entre la version XML PHP et JSON


 
Mauvaise excuse à mon avis le coup du codage en php, suffit de revoir la structure de ton tableau en php pour avoir qq chose du genre :

Code :
  1. $VillesTrouvees = array(
  2.                                 "commune" => array('Ville 1", "Ville 2"...),
  3.                                 "cp" => array("cp1", "cp2"...),
  4.                                 "latitude" => array("lat1", lat2"...),
  5.                                 ...
  6.                               );

   
 
Ou encore :

Code :
  1. $VillesTrouvees = array(
  2.                                 "Ville 1" => array("nom principal" => "Ville 1",
  3.                                                        "nom secondaire" => "VILLE 1",
  4.                                                        "cp" => "cp1",
  5.                                                        "latitude" => "lat1"
  6.                                                       ),
  7.                                 "Ville 2" => array(....)
  8.                                 ...
  9.                               );

       
 

mmike57 a écrit :


Pour ces 2 balises, vaudrait mieux un balise qui contient le nom "principal" (ce que tu as fait du reste) et après, une balise qui contient une liste de noms secondaires. Ex :
Réponse : Il n'y à toujours qu'un seul et unique nom secondaire, ceci est invariant pour toutes les communes de France sans exception...


Dans ce cas, tu fais une balise <nom_principal> et une balise "<non_secondaire> par ex. En plus, sémantiquement, c'est quand même mieux que "nom 1" et "nom 2".
 

mmike57 a écrit :


dommage qu'on ne puisse pas rechercher que sur le nom d'une ville quand on met le bon nom (ou au moins un nb de caractères suffisants). Là, faut spécifier le département :/ Pour traiter ce cas, tu devrais faire une première recherche pourvoir s'il n'existe pas de ville correspondant exactement au nom donné. Si y'en a que qq'unes, tu ne demandes pas le département. Si y'en a trop, tu demandes à l'utilisateur de préciser sa recherche avec le département. ;)
Réponse : C'est une idée correcte, mais mon systeme fonctionne en pur PHP et il n'y à pas de base de données. C'est donc difficile d'ouvrir un fichier qui peut faire 300ko, qui indexe environ 1000 communes... Pour le moment le plus gros fichier à ouvrir fait 3ko... Mais pourquoi pas faire ce type de recherche en SQL, ça peut être une idée, mais, le code-postal c'est pratique aussi...


Pour soutenir la charge, ça serait mieux une BD SQL, comme Sqlite par ex. Pour faire tout un tas d'autres traitements aussi (par ex : lister les communes dans un rayan de x kms) ;)
 

mmike57 a écrit :


dommage aussi, on ne peux pas utiliser les % et _ comme pattern pour la recherche sur le nom d'une ville. Il semble retirer les % et garder que la 1ère lettre trouvée. Du reste, si je mets #URL  il me sort les villes qui commencent par O mais se moque du u derrière :/
Réponse : Je ne vois pas l'utilité de chercher toutes les communes se terminant par... c'est très facilement faisable comme implémentation mais ou est la réelle utilité...? Le moteur de recherche prend la chaîne de caractères d'entrée exemple BILLONVILLE, la décompose en plusieurs parties de cette façon, BIONVILL, BIONVIL, BIONVI, BIONV, BION, BIO, BI, B ... Si le premier ne donne aucun résultat on passe au suivant... jusqu'à renvoyer touts les B... Il ne faut pas taper de communes invalides...


Les patterns avec des % peuvent servir quand on n'est pas sûr de l'orthographe d'une ville à un ou plusieurs certain endroit mais qu'on sait qu'en donnant les autres lettres dont on est sûr, on trouvera le résultat.
 

mmike57 a écrit :


Question : tu vas tenir à jour la base de données? Doit bien y avoir des communes qui se créent ou qui changent de CP?
Oui grâce à l'INSEE entre autre, pour le moment la base est plus complète que Yahoo! et Google. Il y à toutes les villes de France, touts les coordonnées géographiques et 99% des codes postaux, chaque ville au moins en à un, certaines en ont 10 ou 20...


ok.


Message édité par rufo le 29-06-2012 à 12:15:09

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147563
mmike57
Posté le 29-06-2012 à 12:58:55  profilanswer
 

La recherche par "Ville Rapide" est désormais fonctionnelle, elle permet de rechercher n'importe quelle ville de France à partir de 2 lettres.
Le plus gros fichier à inclure pèse désormais 40ko pour ce type de recherche.

n°2147565
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2012 à 13:10:18  profilanswer
 

Je reste convaincu qu'une BD plutôt que des fichiers txt serait bien plus efficace. Surtout qu'apparemment, non content de devoir trouver toutes les villes, faut ensuite que tu post-traites les données pour faire tes fichiers txt qui semblent émuler une certaine indexation que tu ferais très facilement avec une BD :/
 
Edit : quand je vois que j'interroge des tables (> 100 Mo chacune) d'une BD en moins de qq secondes avec du php, avec ta méthode de fichiers, et du php, ça serait bien trop long...


Message édité par rufo le 29-06-2012 à 13:13:25

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147566
mmike57
Posté le 29-06-2012 à 13:15:03  profilanswer
 

Mon serveur mutualisé de développement à tenu la charge, j'ai fait 50000 appels en 3 heures dessus... mais, oui, je dispose des données au format sql...

n°2147567
mmike57
Posté le 29-06-2012 à 13:16:14  profilanswer
 

non, si tu indexes ça bien , tes 100 mo je les divise en 1000 fichiers de 100ko et une regex ultra précise te sors l'information de manière instantanée... L'avantage étant que tu peux faire des indexations par regex, encore plus pertinentes...

Message cité 1 fois
Message édité par mmike57 le 29-06-2012 à 13:29:01
mood
Publicité
Posté le 29-06-2012 à 13:16:14  profilanswer
 

n°2147570
mmike57
Posté le 29-06-2012 à 13:23:31  profilanswer
 

Exemple de recherche en mode Ville Rapide : http://youtroc.com/www/communes-france.api?v=vic

n°2147573
mmike57
Posté le 29-06-2012 à 13:34:23  profilanswer
 

Pour afficher un résultat en PHP :  
print_r(json_decode(file_get_contents('http://youtroc.com/www/communes-france.api?o=j&v=vic'),true));


Message édité par mmike57 le 29-06-2012 à 13:34:33
n°2147580
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2012 à 14:00:13  profilanswer
 

mmike57 a écrit :

non, si tu indexes ça bien , tes 100 mo je les divise en 1000 fichiers de 100ko et une regex ultra précise te sors l'information de manière instantanée... L'avantage étant que tu peux faire des indexations par regex, encore plus pertinentes...


 
Si j'ai bien compris ce que tu me dis, avec ta méthode, tu doit post-traiter des donner les stocker d'une certaine manière pour correspondre à une indexation que tu as définie. Si tu change ta stratégie d'indexation, tu dois regénérer tes fichiers. Avec une BD, ça se fait tout seul et en plus, tu peux définir plusieurs index, donc plusieurs stratégies de recherche.
 
cf mon ex donné : avec ton système, peux-tu facilement me sortir les villes se trouvant dans un rayon de x kms autour d'un point ou d'une ville donnée? Avec une BD oui, en tout cas...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147581
mmike57
Posté le 29-06-2012 à 14:17:50  profilanswer
 

rufo a écrit :


 
Si j'ai bien compris ce que tu me dis, avec ta méthode, tu doit post-traiter des donner les stocker d'une certaine manière pour correspondre à une indexation que tu as définie. Si tu change ta stratégie d'indexation, tu dois regénérer tes fichiers. Avec une BD, ça se fait tout seul et en plus, tu peux définir plusieurs index, donc plusieurs stratégies de recherche.
 
cf mon ex donné : avec ton système, peux-tu facilement me sortir les villes se trouvant dans un rayon de x kms autour d'un point ou d'une ville donnée? Avec une BD oui, en tout cas...


 
Idéalement oui, il faut pré-traiter les données qui sont stockées dans un (ou quelques fichiers php dans le cas des 100mo) pour les décliner en autant de version que nécessaires en utilisant toute la puissance des regex pour rendre l'opération ultra efficace, le pré traitement prend environ quelques minutes... Je comprends l'attrait de SQL dans ce travail, mais on ne fait pas de calcul de distances avec cet api... ça serait pourtant facile, mais ça n'est pas son but... et les distances en SQL vont être dures a calculer car étant donné l'équation d'un cercle qui est x² _ y² =0 tu dois élever beaucoup de données au carré pour les calculs... un peu embêtant...

n°2147593
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2012 à 16:06:08  profilanswer
 

Tu sais, j'ai bien fait faire du calcul matriciel à Mysql sur des matrices de 5000x5000 où je calculais le % de corrélation entre les lignes et les colonnes, soit le calcul tA x A :/  
 
Mais pour le pb exposé, je pensais plus, au lieu du rayon de x kms, à une zone carré de x km de côté et là, avec le sql, ça va super vite, juste besoin de 2 between...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2147661
mmike57
Posté le 01-07-2012 à 08:07:24  profilanswer
 

Voilà, tout fonctionne en full SQL, les données de population ont été insérées, chaque commune de France en est dotée... L'api ne prend plus qu'un seul paramètre, q... exemple : http://youtroc.com/apis/geofrance?q=r


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Communes de France 2012 : L'API intemporel !

 

Sujets relatifs
[Java] Copyright d'une API dans Oracle vs GoogleFichier Excel "Eurofoot 2012" gratuit à télécharger
[RESOLUE] powershell exchange 2010API Ldap
Fan Gate Facebook et API PHPDifférence de chargement d'une API entre exécution class et Jar
ECHEC - L'application pour le chemin de contexte /OpenClinica nProblème VBS 2008 API showwindow
CNIL Belgique ? France?Concours Prologin 2012
Plus de sujets relatifs à : Communes de France 2012 : L'API intemporel !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR