-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtrainStatus.py
64 lines (48 loc) · 1.74 KB
/
trainStatus.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#Developers: Federico De Rocco, Tommaso Bertelli
from __future__ import print_function
import sys
import datetime
import json
from TrainMonitor import viaggiatreno
api=viaggiatreno.API()
delayMargin=5
delaySafe=1
def getTrainStatus(trainID):
departures = api.call("cercaNumeroTrenoTrenoAutocomplete", trainID)
if len(departures)==0:
return None
return api.call("andamentoTreno", departures[0][1], trainID, departures[0][2])
def checkTrain(trainID, stationFullID):
apiReport=getTrainStatus(trainID)
if apiReport==None:
return None
trainTime=dict()
trainTime["trainID"]=trainID
if apiReport['tipoTreno'] == 'ST' or apiReport['provvedimento'] == 1: #train is cancelled
trainTime["error"]="Cancelled"
if apiReport["oraUltimoRilevamento"] == None: #train is not departed yet
trainTime["error"]="Not departed"
for i in range(len(apiReport["fermate"])): #gets position of the station in the list
if apiReport["fermate"][i]["id"] == stationFullID:
break
trainTime["lastStation"]=apiReport["stazioneUltimoRilevamento"]
trainTime["tsLastStation"]=apiReport["oraUltimoRilevamento"]
trainTime["delay"]=apiReport["ritardo"]
if apiReport["ritardo"]>=delayMargin:
trainTime["expectedStation"]=apiReport["fermate"][i]["partenza_teorica"]+(apiReport["ritardo"]-delaySafe)*60*1000
else:
trainTime["expectedStation"]=apiReport["fermate"][i]["partenza_teorica"]
return trainTime
def checkTrainList(trains, stationFullID):
listTrainTime=[]
for x in trains:
train=checkTrain(x, stationFullID)
if train != None:
listTrainTime.append(train)
return listTrainTime
def filterTrainList(trains, ts):
for x in trains:
if x["expectedStation"] != None:
if int(x["expectedStation"]/1000)+x["delay"]*60<int(ts):
trains.remove(x)
return trains