Communes de France 2012 : L'API intemporel ! - Divers - Programmation
Marsh Posté le 29-06-2012 à 11:04:23
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 :
|
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
Marsh Posté le 29-06-2012 à 11:11:56
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?
Marsh Posté le 29-06-2012 à 11:54:31
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...
Marsh Posté le 29-06-2012 à 11:58:21
En haut de chaque message vous avez des icône qui permettent d'inclure automatiquement le message concerné à votre propre message.
Marsh Posté le 29-06-2012 à 12:11:59
mmike57 a écrit : Petite remarque : le choix des noms des balises xml n'est pas très heureux je trouve. |
XML est une norme du w3c qui propose d'ailleurs un outil de validation Il vaudrait donc mieux respecter cette norme.
mmike57 a écrit : |
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 :
|
Ou encore :
Code :
|
mmike57 a écrit : |
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 : |
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 : |
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 : |
ok.
Marsh Posté le 29-06-2012 à 12:58:55
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.
Marsh Posté le 29-06-2012 à 13:10:18
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...
Marsh Posté le 29-06-2012 à 13:15:03
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...
Marsh Posté le 29-06-2012 à 13:16:14
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...
Marsh Posté le 29-06-2012 à 13:23:31
Exemple de recherche en mode Ville Rapide : http://youtroc.com/www/communes-france.api?v=vic
Marsh Posté le 29-06-2012 à 13:34:23
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));
Marsh Posté le 29-06-2012 à 14:00:13
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...
Marsh Posté le 29-06-2012 à 14:17:50
rufo a écrit : |
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...
Marsh Posté le 29-06-2012 à 16:06:08
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...
Marsh Posté le 01-07-2012 à 08:07:24
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
Marsh Posté le 29-06-2012 à 04:56:22
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)
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