From 036b012e323ec73e96cf06bb868f33f61a80f896 Mon Sep 17 00:00:00 2001 From: Phyks Date: Sun, 8 Sep 2013 22:46:51 +0200 Subject: [PATCH] Script working --- README.md | 12 +++++++-- data/README | 3 +++ velib_stats.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 data/README create mode 100755 velib_stats.py diff --git a/README.md b/README.md index 9c584f1..5e5132f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,17 @@ VelibStats ========= -Ce petit script permet de vérifier à intervalle réguliers (à lancer _via_ une tâche Cron) l'état des stations de Vélib que vous souhaitez surveiller. Il est ainsi possible de récupérer un graphe d'utilisation des stations que vous utilisez fréquemment en fonction de l'heure de la journée / du jour de la semaine etc. +Ce petit script permet de vérifier à intervalle réguliers (à lancer _via_ une tâche Cron) l'état des stations de Vélib que vous souhaitez surveiller. Il est ainsi possible de récupérer un graphe d'utilisation des stations que vous utilisez fréquemment en fonction de l'heure de la journée / du jour de la semaine etc. C'est également un petit exemple d'utilisation de l'API REST de Vélib en Python. -**Important note : Je suis en train de modifier ce script et supprimerait ce message lorsque celui-ci sera pleinement utilisable.** +## Utilisation +Ce script sert à surveiller une station et à noter les vélos disponibles et les emplacements disponibles à chaque exécution, afin d'avoir des statistiques sur les stations alentours. + +Il s'utilise en ligne de commande : +```` +velib_stats.py NUMERO_DE_STATION +```` + +Pour trouver le numéro unique identifiant la station qui vous intéresse, rendez-vous sur le site de Vélib (http://www.velib.paris.fr/Plan-stations) et recupérez le numéro de la station qui vous intéresse dans l'infobulle. ## License Please, send me an email if you use or modify this program, just to let me know if this program is useful to anybody or how did you improve it :) You can also send me an email to tell me how lame it is ! :) diff --git a/data/README b/data/README new file mode 100644 index 0000000..656f244 --- /dev/null +++ b/data/README @@ -0,0 +1,3 @@ +Ce répertoire sert à stocker les fichiers générés par le script. + +(Non, ce README n'est pas uniquement là pour pouvoir versionner le répertoire en question avec Git) :) diff --git a/velib_stats.py b/velib_stats.py new file mode 100755 index 0000000..c98c50d --- /dev/null +++ b/velib_stats.py @@ -0,0 +1,67 @@ +#!/usr/bin/python + +import sys +import datetime +import urllib3 +import xml.etree.ElementTree as ET + +if len(sys.argv) != 2: + exit('Usage : velib_stats.py Station_number') + +# Parameters +station_number = int(sys.argv[1]) +url = ('http://www.velib.paris.fr/service/stationdetails/paris/' + + str(station_number)) + +# Initialize libraries +http = urllib3.PoolManager() +today = datetime.datetime.now() + +# Get the response from velib REST API +r = http.request('GET', url) + +if r.status == 200: + station_xml = ET.fromstring(r.data) + + # Get station status + write = today.strftime('%H\t\t%M') + + for child in station_xml.iter('available'): + write += "\t\t"+child.text + for child in station_xml.iter('free'): + write += "\t\t"+child.text + + try: + # If file exists, check last updated day + with open('data/'+str(station_number), 'r') as fh: + lines = fh.readlines() + for line in reversed(lines): + if "Jour" in line: + previous_day = line[7:] + # If today != last day of update, add a header + if (previous_day[:2] != today.strftime('%d') and + previous_day[2:] != today.strftime('%m')): + write = ("Jour = "+today.strftime('%d/%m')+"\n" + + "======================\n" + + "Heure\t\tMin\t\tDispos\t\tPlaces\n" + + write) + + # Write content to file + with open('data/'+str(station_number), 'a') as fh: + fh.write("\n"+write) + print(write) + except IOError: + # If file doesn't exist, create it + write = ("Données pour la station n°"+str(station_number)+"\n" + + "==============================================\n\n" + + "Jour = "+today.strftime('%d/%m')+"\n" + + "======================\n" + + "Heure\t\tMin\t\tDispos\t\tPlaces\n" + + write) + with open('data/'+str(station_number), 'w') as fh: + fh.write(write) + print(write) + +else: + exit('Erreur lors de la récupération des infos sur la station' + + station_number)