Browse Source

Script working

Phyks (Lucas Verney) 6 years ago
parent
commit
036b012e32
3 changed files with 80 additions and 2 deletions
  1. 10
    2
      README.md
  2. 3
    0
      data/README
  3. 67
    0
      velib_stats.py

+ 10
- 2
README.md View File

@@ -1,9 +1,17 @@
1 1
 VelibStats
2 2
 =========
3 3
 
4
-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.
4
+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.
5 5
 
6
-**Important note : Je suis en train de modifier ce script et supprimerait ce message lorsque celui-ci sera pleinement utilisable.**
6
+## Utilisation
7
+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.
8
+
9
+Il s'utilise en ligne de commande :
10
+```` 
11
+velib_stats.py NUMERO_DE_STATION 
12
+````
13
+
14
+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.
7 15
 
8 16
 ## License
9 17
 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 ! :)

+ 3
- 0
data/README View File

@@ -0,0 +1,3 @@
1
+Ce répertoire sert à stocker les fichiers générés par le script.
2
+
3
+(Non, ce README n'est pas uniquement là pour pouvoir versionner le répertoire en question avec Git) :)

+ 67
- 0
velib_stats.py View File

@@ -0,0 +1,67 @@
1
+#!/usr/bin/python
2
+
3
+import sys
4
+import datetime
5
+import urllib3
6
+import xml.etree.ElementTree as ET
7
+
8
+if len(sys.argv) != 2:
9
+    exit('Usage : velib_stats.py Station_number')
10
+
11
+# Parameters
12
+station_number = int(sys.argv[1])
13
+url = ('http://www.velib.paris.fr/service/stationdetails/paris/' +
14
+       str(station_number))
15
+
16
+# Initialize libraries
17
+http = urllib3.PoolManager()
18
+today = datetime.datetime.now()
19
+
20
+# Get the response from velib REST API
21
+r = http.request('GET', url)
22
+
23
+if r.status == 200:
24
+    station_xml = ET.fromstring(r.data)
25
+
26
+    # Get station status
27
+    write = today.strftime('%H\t\t%M')
28
+
29
+    for child in station_xml.iter('available'):
30
+        write += "\t\t"+child.text
31
+    for child in station_xml.iter('free'):
32
+        write += "\t\t"+child.text
33
+
34
+    try:
35
+        # If file exists, check last updated day
36
+        with open('data/'+str(station_number), 'r') as fh:
37
+            lines = fh.readlines()
38
+            for line in reversed(lines):
39
+                if "Jour" in line:
40
+                    previous_day = line[7:]
41
+        # If today != last day of update, add a header
42
+        if (previous_day[:2] != today.strftime('%d') and
43
+           previous_day[2:] != today.strftime('%m')):
44
+            write = ("Jour = "+today.strftime('%d/%m')+"\n" +
45
+                     "======================\n" +
46
+                     "Heure\t\tMin\t\tDispos\t\tPlaces\n" +
47
+                     write)
48
+
49
+        # Write content to file
50
+        with open('data/'+str(station_number), 'a') as fh:
51
+            fh.write("\n"+write)
52
+            print(write)
53
+    except IOError:
54
+        # If file doesn't exist, create it
55
+        write = ("Données pour la station n°"+str(station_number)+"\n" +
56
+                 "==============================================\n\n" +
57
+                 "Jour = "+today.strftime('%d/%m')+"\n" +
58
+                 "======================\n" +
59
+                 "Heure\t\tMin\t\tDispos\t\tPlaces\n" +
60
+                 write)
61
+        with open('data/'+str(station_number), 'w') as fh:
62
+            fh.write(write)
63
+            print(write)
64
+
65
+else:
66
+    exit('Erreur lors de la récupération des infos sur la station' +
67
+         station_number)