Recherche par Addresse #1
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Aquilenet/axione-elig-test#1
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Pour le moment, nous ne supportons le test d'éligibilité que via un numéro de PTO. Ce qui est assez limité étant donné que dans pas mal de cas, on peut se retrouver avec un logement éligible à l'offre Axione mais n'ayant jamais été raccordé au réseau fibre, et donc ne possédant pas encore de PTO.
L'API interop-fibre nous propose d'utiliser 3 différents référentiels géographiques pour faire une recherche d'éligibilité:
Hexaclé est un référentiel propriétaire appartenant à la poste, nous n'y avons pas accès.
Le référentiel BAN, bien que présent dans l'interface du webservice, n'est pas encore implémenté par Axione. Voir le thread e-mail https://listes.aquilenet.fr/arc/admin-ftth-axione/2021-09/msg00145.html pour plus d'infos.
Ça nous laisse avec pour seule option le codage RIVOLI. Si on regarde le WSDL de description du webservice, on voit qu'on aura besoin des champs suivants pour la requête:
Toutes ces données sont issues du fichier FANTOIR. Ce fichier est librement disponible, mis a disposition par data.gouv.fr. En revanche, contrairement a BAN, il ne semble pas y avoir d'API en ligne nous permettant de facilement exploiter ces données. Nous allons devoir faire ça nous-même.
Le fichier FANTOIR est distribué sous la forme d'un fichier texte plat, il n'est pas directement exploitable tel quel.
Bonne nouvelle: l'Etalab distribue une librairie javascript permettant de parser ce fichier et de générer une base de données SQLite. Base qui serait, elle, facilement exploitable. Voir https://github.com/BaseAdresseNationale/fantoir
Je pense qu'on pourrait procéder de la manière suivante:
D'un point de vue HTTP, on se retrouverait avec ces deux nouveaux endpoints exposés par l'application Flask:
Il faudra ensuite créer le formulaire permettant a l'utilisateur de récupérer/entrer les données necessaires pour faire l'appel sur l'API d'Axione décrite plus haut. Idéalement, il faudrait que l'autocomplete du formulaire fonctionne également sans Javascript.
Pour télécharger le dernier fichier FANTOIR zippé:
ça pourra servir si on veut faciliter les mises à jours. En ajoutant des checks sur la date car là on présume que le dernier de la liste c'est le fichier le plus récent (ce qui est le cas aujourd'hui.
Le format de la DB générée par https://github.com/BaseAdresseNationale/fantoir est assez foireux. C'est une seule table clé/value ayant pour clé les codes INSEE, pour value un JSON contenant toutes les voies de la commune. Bref, pas top.
J'ai essayé de faire une requête en utilisant cette base de données malheureusement sans succès.
A partir de mon adresse, pour laquelle j'ai réussi a trouver le code rivoli a l'aide d'une la base de données SQLite et d'un peu de magie
jq
:L'API me retourne invariablement un
Qui semble être une erreur générique de leur côté...
Le format de requête ne semble pas coller a 100% a interop' fibre pour les requêtes PTO et Hexaclé. Le code PTO/Hexaclé est supposé être mis dans un nœud XML et non pas comme attribut du nœud
referenceAdresse
.Bref, ça coince un peu. J'ai l'impression que ma requête n'est pas correctement formatée.
Requête FANTOIR fonctionelle:
Pour le dev de la recherche d'adresse j'ai ajouté à la base sqlite Fantoir les données insee sur les communes de la poste (laposte_hexasmal
Pour faire un import du csv de la poste j'ai dû y apporter quelques modifs comme il n'est pas au format standard csv (';' au lieu de ','), sur le fichier j'ai donc remplacer avec sed ; par , et dans l'entête ajouté une colonne
,coordonnee s_gps_y
(et oui les coordonnees GPS sont séparées par une ',')Une fois fait cela dans la base sqlite fantoir j'ai fait
.import --csv path/to/laposte_hexasmal.csv insee
pour créer la table insee.J'ai ajouté 2 endpoints qui renvoient chacun un tableau JSON:
/addresses/communes?s=<zip ou nom commune>
/addresses/fantoirvoies/<codeInsee>
cf. felix.baylac/axione-elig-test#8
Cool!
Ça marche. Pour info, tu peux faire tout ça directement dans SQlite via: