-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvolganet_timetable.py
110 lines (100 loc) · 3.75 KB
/
volganet_timetable.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import requests
from re import sub
from datetime import date as d
from datetime import time as t
class VolganetTimetable:
def __init__(self):
self.methods_count = 0
self.sid = self.__get_sid()
def __create_post(self, method_name, params = {}):
self.methods_count += 1
res = requests.post("https://transport.volganet.ru/api/rpc.php",
json={"jsonrpc": "2.0","method": method_name,"params":params, "id": self.methods_count},
headers={
"Content-Type":"application/json",
"Host":"transport.volganet.ru",
"Origin": "https://transport.volganet.ru",
"Referer": "https://transport.volganet.ru/main.php",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin"
}
)
return res.json()["result"]
def __get_sid(self):
return self.__create_post("startSession")["sid"]
def __clear_keys(self, bk_dictionary):
if not isinstance(bk_dictionary, (list, dict)):
return bk_dictionary
for key in bk_dictionary.copy():
try:
bk_dictionary[key] = self.__clear_keys(bk_dictionary[key])
bk_dictionary[sub(r"(mr_)|(tt_)|(rl_)|(rc_)|(st_)|(rv_)", '', key)] = bk_dictionary.pop(key)
except:
idx = bk_dictionary.index(key)
bk_dictionary[idx] = self.__clear_keys(bk_dictionary[idx])
return bk_dictionary
def get_all_routes(self):
params = {
"sid": self.sid,
"ok_id": ""
}
return self.__clear_keys(self.__create_post("getTransTypeTree", params))
"""
route_type values:
1 -> Автобус - Bus
2 -> Троллейбус - Trolleybus
3 -> Трамвай - Tram
"""
def get_routes_by_local_num(self, route_type, routes_numbers = []):
routes_numbers = [str(x) for x in routes_numbers]
timetable = self.get_all_routes()
return [
route
for route in timetable[route_type - 1]["routes"]
if route["num"] in routes_numbers
]
"""
Get all stations on this route from A to B
"""
def get_route_race_tree(self, route_id, date = ""):
if date == "":
date = d.today().strftime("%Y-%m-%d")
params = {
"sid": self.sid,
"mr_id": route_id,
"data": date
}
race_tree = self.__clear_keys(self.__create_post("getRaceTree", params))
for i in range(0,1):
race_tree[i]["stopList"] = [x for x in race_tree[i]["stopList"] if x["orderby"] > 0]
return race_tree
"""
direction values:
A -> B
B <- A
"""
def get_route_timetable(self, route_id, route_number, direction, date = "", station_id = 0):
if date == "":
date = d.today().strftime("%Y-%m-%d")
params = {
"sid": self.sid,
"mr_id": route_id,
"data": date,
"rl_racetype": direction,
"rc_kkp": "",
"st_id": station_id
}
timetable = self.__create_post("getRaspisanie", params)
timetable = self.__clear_keys(timetable)
for idx in range(len(timetable["stopList"])):
hours = timetable["stopList"][idx].pop("hours")
timetable["stopList"][idx]["times"] = []
for hour in hours:
for minute in hour["minutes"]:
timetable["stopList"][idx]["times"].append(
t(
int(hour["hour"] if hour["hour"] < 24 else 0),
int(minute["minute"])
)
)
return timetable