GAIA-Hackathon / APIs /geolocation.py
TD9991's picture
second commit
03df0fa
raw
history blame
2.02 kB
import requests
import re
def get_geolocation(adresse, latitude, longitude):
"""Return latitude, longitude & code INSEE from an adress. Latitude & longitude only if they are not specified in the function.
Args:
adresse (str): Adress or city for example
Returns:
Tuple(float, float, str): latitude, longitude & code INSEE
"""
if latitude is not None and longitude is not None:
url = f"https://data.geopf.fr/geocodage/reverse?lon={longitude}&lat={latitude}&index=parcel"
else:
url = f"https://data.geopf.fr/geocodage/search?q={adresse}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()["features"][0]
if 'parcel' in url:
properties = data["properties"]
code_insee = properties["departmentcode"] + \
properties["municipalitycode"]
else:
coordinates = data["geometry"]["coordinates"]
latitude, longitude = coordinates[1], coordinates[0]
code_insee = data["properties"]["citycode"]
return latitude, longitude, code_insee
return None, None, None
def get_risques(code_insee):
"""Get list of risks from a 'code INSEE'
Args:
code_insee (str): Code INSEE
Returns:
List[str]: List of risks
"""
requete = f"https://georisques.gouv.fr/api/v1/gaspar/risques?code_insee={code_insee}"
response = requests.get(requete)
if response.status_code == 200:
risques = eval(response.content.decode().replace("null", "-1"))
if risques["results"] > 0:
risques = risques["data"]
risques = [r["libelle_risque_long"]
for r in risques[0]["risques_detail"]]
else:
risques = []
else:
risques = None
return risques
if __name__ == "__main__":
lon, lat, code_insee = get_geolocation(
"6 allée de chartres 91370 Verrieres le Buisson", None, None)
print(get_risques(code_insee))