forked from Olav63/outils_OSM
pylint sur fichier principal
This commit is contained in:
parent
1c535dd9b9
commit
af09edea2b
@ -1,4 +1,11 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Module principal :
|
||||||
|
- récupération de données par appel à Overpass
|
||||||
|
- géocodage inverse
|
||||||
|
- export des données en JSON pour utilisation avec umap
|
||||||
|
- sauvegarde des données en ods
|
||||||
|
"""
|
||||||
|
|
||||||
# inspiration :
|
# inspiration :
|
||||||
# https://towardsdatascience.com/loading-data-from-openstreetmap-with-python-and-the-overpass-api-513882a27fd0
|
# https://towardsdatascience.com/loading-data-from-openstreetmap-with-python-and-the-overpass-api-513882a27fd0
|
||||||
@ -15,25 +22,21 @@
|
|||||||
# https://pythonhosted.org/pyexcel-ods/
|
# https://pythonhosted.org/pyexcel-ods/
|
||||||
# pip3 install pyexcel-ods3
|
# pip3 install pyexcel-ods3
|
||||||
|
|
||||||
import requests
|
|
||||||
import json
|
|
||||||
import time
|
import time
|
||||||
from pyexcel_ods3 import save_data
|
|
||||||
from collections import OrderedDict
|
|
||||||
import os
|
import os
|
||||||
from osm_vc63 import errors
|
from osm_vc63 import errors
|
||||||
from osm_vc63 import requetes
|
from osm_vc63 import requetes
|
||||||
from osm_vc63.utils import Utils
|
from osm_vc63.utils import Utils
|
||||||
|
|
||||||
overpass_url = "http://overpass-api.de/api/interpreter"
|
OVERPASS_URL = "http://overpass-api.de/api/interpreter"
|
||||||
geo_api_url = "https://api-adresse.data.gouv.fr"
|
GEO_API_URL = "https://api-adresse.data.gouv.fr"
|
||||||
dossier_sauvegarde = "resultats/"
|
DOSSIER_SAUVEGARDE = "resultats/"
|
||||||
|
|
||||||
# nombre maxi de retries quand echec API
|
# nombre maxi de retries quand echec API
|
||||||
max_retry = 4
|
MAX_RETRY = 4
|
||||||
|
|
||||||
# delai en secondes entre les tentatives
|
# delai en secondes entre les tentatives
|
||||||
retry_delay = 120
|
RETRY_DELAY = 120
|
||||||
|
|
||||||
|
|
||||||
# id du département "Puy de Dôme" : 7406
|
# id du département "Puy de Dôme" : 7406
|
||||||
@ -42,7 +45,7 @@ retry_delay = 120
|
|||||||
# id Romagnat : 138269
|
# id Romagnat : 138269
|
||||||
|
|
||||||
# l'id de l'area se calcule en ajoutant 3600000000 au numéro de l'objet OSM
|
# l'id de l'area se calcule en ajoutant 3600000000 au numéro de l'objet OSM
|
||||||
aire_de_recherche = str(3600000000 + 110866)
|
AIRE_DE_RECHERCHE = str(3600000000 + 110866)
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------
|
# ----------------------------------------------
|
||||||
@ -73,8 +76,16 @@ trad_bicycle_parking = {
|
|||||||
def executer_requete_et_exporter_resultats(
|
def executer_requete_et_exporter_resultats(
|
||||||
nom_req, critere, aire_de_recherche, overpass_query_fields
|
nom_req, critere, aire_de_recherche, overpass_query_fields
|
||||||
):
|
):
|
||||||
|
"""
|
||||||
|
Appelle Overpass et exporte les résultats
|
||||||
|
|
||||||
utils = Utils(overpass_url, geo_api_url, dossier_sauvegarde)
|
nom_req : nom de la requête (type d'informations recherchées)
|
||||||
|
critere : requête passée à Overpass
|
||||||
|
aire_de_recherche : zone géographique d'intérêt
|
||||||
|
overpass_query_fields : champs récupérés pour la réponse
|
||||||
|
"""
|
||||||
|
|
||||||
|
utils = Utils(OVERPASS_URL, GEO_API_URL, DOSSIER_SAUVEGARDE)
|
||||||
data = utils.run_overpass_query(critere, aire_de_recherche)
|
data = utils.run_overpass_query(critere, aire_de_recherche)
|
||||||
|
|
||||||
nb_elements = len(data["elements"])
|
nb_elements = len(data["elements"])
|
||||||
@ -132,34 +143,34 @@ def executer_requete_et_exporter_resultats(
|
|||||||
export_json = utils.nettoyage_json_pour_umap(data, overpass_query_fields)
|
export_json = utils.nettoyage_json_pour_umap(data, overpass_query_fields)
|
||||||
|
|
||||||
# Sauvegarde
|
# Sauvegarde
|
||||||
os.makedirs(dossier_sauvegarde, exist_ok=True)
|
os.makedirs(DOSSIER_SAUVEGARDE, exist_ok=True)
|
||||||
|
|
||||||
utils.save_as_json(export_json, nom_req)
|
utils.save_as_json(export_json, nom_req)
|
||||||
utils.save_as_ods(overpass_query_fields, data, nom_req)
|
utils.save_as_ods(overpass_query_fields, data, nom_req)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
for req in requetes.reqs:
|
"""Routine principale"""
|
||||||
|
|
||||||
for nb_essai in range(max_retry): # on tente max_retry fois
|
for req in requetes.reqs:
|
||||||
|
for nb_essai in range(MAX_RETRY): # on tente max_retry fois
|
||||||
try:
|
try:
|
||||||
executer_requete_et_exporter_resultats(
|
executer_requete_et_exporter_resultats(
|
||||||
req.nom, req.critere, aire_de_recherche, req.champs
|
req.nom, req.critere, AIRE_DE_RECHERCHE, req.champs
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
except errors.ApiError:
|
except errors.ApiError:
|
||||||
|
|
||||||
if nb_essai == max_retry:
|
if nb_essai == MAX_RETRY:
|
||||||
print("trop d'erreurs d'API - abandon")
|
print("trop d'erreurs d'API - abandon")
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
print("erreur API - on retente dans " + str(retry_delay) + "s")
|
print("erreur API - on retente dans " + str(RETRY_DELAY) + "s")
|
||||||
|
|
||||||
time.sleep(retry_delay)
|
time.sleep(RETRY_DELAY)
|
||||||
|
|
||||||
print("Fini")
|
print("Fini")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user