oedb-backend/extractors/bison_fute/bisonfute.py
2025-09-17 23:52:49 +02:00

63 lines
1.9 KiB
Python

import requests
import json
import time
from pyproj import Proj, transform
"""
Scrapping des données de circulation sur bisonfute.fr
export en stream geojson avec 1 événement par ligne
"""
def charge(x,y,z):
nb = 0
deeper = False
url = dataurl+("trafic/maintenant/tfs/evenements/%s/%s/%s.json" % (z,x,y))
print(f'scraping sur l url : ${url}')
datareq = requests.get(url=url)
datajson = json.loads(datareq.text)
if not datajson['empty']:
for e in datajson['features']:
if e['properties']['urlImage'][7]=='1':
deeper = True
lon,lat = transform(s_srs,t_srs,e['geometry']['coordinates'][0],e['geometry']['coordinates'][1])
geometry=dict(type = 'Point', coordinates = [round(lon,6),round(lat,6)])
quoi = e['properties']['urlImage'][11:-4]
if quoi == 'travaux':
quoi = 'roadwork'
if quoi == 'bouchon':
quoi = 'jam'
e_what = 'traffic.'+quoi
detailreq = requests.get('http://www.bison-fute.gouv.fr/' + e['properties']['urlcpc'])
detail = json.loads(detailreq.text)
if len(detail)>1:
deeper = True
else:
for d in detail:
print(json.dumps({"geometry":geometry, "properties":{"data":d}}))
#
# if deeper:
# charge(2*x, 2*y, z+1)
# charge((2*x)+1, 2*y, z+1)
# charge(2*x, (2*y)+1, z+1)
# charge((2*x)+1, (2*y)+1, z+1)
#
return nb
# projections utilisées pour transformation en WGS84
s_srs = Proj(init='EPSG:2154')
t_srs = Proj(init='EPSG:4326')
# récupération date courante
datereq = requests.get(url='http://www.bison-fute.gouv.fr/data/iteration/date.json')
datejson = json.loads(datereq.text)
dernier = time.strftime('%Y%m%d-%H%M%S', time.localtime(datejson[0]/1000))
dataurl = "http://www4.bison-fute.gouv.fr/data/data-%s/" % dernier
print(f'dataurl : ${dataurl}')
for x0 in range(0,5):
for y0 in range (0,5):
charge(x0,y0,1)