Use Velib GBFS API
This commit is contained in:
parent
6773227ae1
commit
79c0dc3b29
79
velib.py
79
velib.py
@ -2,7 +2,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pybikes
|
import requests
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@ -67,34 +67,35 @@ def update_stations(conn):
|
|||||||
for i in
|
for i in
|
||||||
c.execute("SELECT id, name, address, latitude, longitude, banking, bonus, bike_stands FROM stations").fetchall()}
|
c.execute("SELECT id, name, address, latitude, longitude, banking, bonus, bike_stands FROM stations").fetchall()}
|
||||||
|
|
||||||
velib = pybikes.get("velib")
|
req_stations = requests.get('https://velib-metropole-opendata.smoove.pro/opendata/Velib_Metropole/station_information.json')
|
||||||
velib.update()
|
stations = {
|
||||||
for station in velib.stations:
|
station['stationCode']: station
|
||||||
|
for station in req_stations.json()['data']['stations']
|
||||||
|
}
|
||||||
|
req_status = requests.get('https://velib-metropole-opendata.smoove.pro/opendata/Velib_Metropole/station_status.json')
|
||||||
|
for station in req_status.json()['data']['stations']:
|
||||||
|
uid = station["stationCode"]
|
||||||
try:
|
try:
|
||||||
# Get old station entry if it exists
|
# Get old station entry if it exists
|
||||||
old_station = database_stations[station.extra["uid"]]
|
old_station = database_stations[uid]
|
||||||
# Diff the two stations
|
# Diff the two stations
|
||||||
event = []
|
event = []
|
||||||
if station.name != old_station[1]:
|
if stations[uid]['name'] != old_station[1]:
|
||||||
event.append({"key": "name",
|
event.append({"key": "name",
|
||||||
"old_value": old_station[1],
|
"old_value": old_station[1],
|
||||||
"new_value": station.name})
|
"new_value": stations[uid]['name']})
|
||||||
if station.latitude != old_station[3]:
|
if stations[uid]['latitude'] != old_station[3]:
|
||||||
event.append({"key": "latitude",
|
event.append({"key": "latitude",
|
||||||
"old_value": old_station[3],
|
"old_value": old_station[3],
|
||||||
"new_value": station.latitude})
|
"new_value": stations[uid]['lat']})
|
||||||
if station.longitude != old_station[4]:
|
if stations[uid]['lon'] != old_station[4]:
|
||||||
event.append({"key": "longitude",
|
event.append({"key": "longitude",
|
||||||
"old_value": old_station[4],
|
"old_value": old_station[4],
|
||||||
"new_value": station.longitude})
|
"new_value": station[uid]['lon']})
|
||||||
if station.extra["banking"] != old_station[5]:
|
if station["numDocksAvailable"] != old_station[7]:
|
||||||
event.append({"key": "banking",
|
|
||||||
"old_value": old_station[5],
|
|
||||||
"new_value": station.extra["banking"]})
|
|
||||||
if station.extra["slots"] != old_station[7]:
|
|
||||||
event.append({"key": "bike_stands",
|
event.append({"key": "bike_stands",
|
||||||
"old_value": old_station[7],
|
"old_value": old_station[7],
|
||||||
"new_value": station.extra["slots"]})
|
"new_value": stations[uid]["capacity"]})
|
||||||
# If diff was found
|
# If diff was found
|
||||||
if len(event) > 0:
|
if len(event) > 0:
|
||||||
# Update
|
# Update
|
||||||
@ -102,43 +103,51 @@ def update_stations(conn):
|
|||||||
"stations " +
|
"stations " +
|
||||||
"SET name=?, latitude=?, longitude=?, " +
|
"SET name=?, latitude=?, longitude=?, " +
|
||||||
"banking=?, bike_stands=? WHERE id=?",
|
"banking=?, bike_stands=? WHERE id=?",
|
||||||
(station.name,
|
(stations[uid]['name'],
|
||||||
station.latitude,
|
stations[uid]['lat'],
|
||||||
station.longitude,
|
stations[uid]['lon'],
|
||||||
station.extra["banking"],
|
None,
|
||||||
station.extra["slots"],
|
stations[uid]['capacity'],
|
||||||
station.extra["uid"]))
|
uid))
|
||||||
# And insert event in the table
|
# And insert event in the table
|
||||||
c.execute("INSERT INTO " +
|
c.execute("INSERT INTO " +
|
||||||
"stationsevents(station_id, timestamp, event) " +
|
"stationsevents(station_id, timestamp, event) " +
|
||||||
"VALUES(?, ?, ?)",
|
"VALUES(?, ?, ?)",
|
||||||
(station.extra["uid"],
|
(uid,
|
||||||
int(time.time()),
|
int(time.time()),
|
||||||
json.dumps(event)))
|
json.dumps(event)))
|
||||||
except KeyError:
|
except KeyError:
|
||||||
c.execute("INSERT INTO " +
|
c.execute("INSERT INTO " +
|
||||||
"stations(id, name, address, latitude, longitude, banking, bonus, bike_stands) " +
|
"stations(id, name, address, latitude, longitude, banking, bonus, bike_stands) " +
|
||||||
"VALUES(?, ?, ?, ?, ?, ?, ?, ?)",
|
"VALUES(?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
(station.extra["uid"],
|
(uid,
|
||||||
station.name,
|
stations[uid]['name'],
|
||||||
"", # Not available
|
"", # Not available
|
||||||
station.latitude,
|
stations[uid]['lat'],
|
||||||
station.longitude,
|
stations[uid]['lon'],
|
||||||
station.extra["banking"],
|
None, # Not available
|
||||||
False, # Not available
|
False, # Not available
|
||||||
station.extra["slots"]))
|
stations[uid]["capacity"]))
|
||||||
except TypeError:
|
except TypeError:
|
||||||
conn.rollback()
|
conn.rollback()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
numEBikesAvailable = (
|
||||||
|
station['numBikesAvailable']
|
||||||
|
- next(
|
||||||
|
x['ebike']
|
||||||
|
for x in station['num_bikes_available_types']
|
||||||
|
if 'ebike' in x
|
||||||
|
)
|
||||||
|
)
|
||||||
c.execute("INSERT INTO " +
|
c.execute("INSERT INTO " +
|
||||||
"stationsstats(station_id, available_bikes, available_ebikes, free_stands, status, updated) " +
|
"stationsstats(station_id, available_bikes, available_ebikes, free_stands, status, updated) " +
|
||||||
"VALUES(?, ?, ?, ?, ?, ?)",
|
"VALUES(?, ?, ?, ?, ?, ?)",
|
||||||
(station.extra["uid"],
|
(uid,
|
||||||
station.bikes - station.extra["ebikes"],
|
station['numBikesAvailable'],
|
||||||
station.extra["ebikes"],
|
numEBikesAvailable,
|
||||||
station.free,
|
station['numDocksAvailable'],
|
||||||
station.extra["status"],
|
None,
|
||||||
int(time.time()))) # Not available, using current timestamp
|
int(time.time()))) # Not available, using current timestamp
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user