Ajout des horaires à l'arrêt

This commit is contained in:
tfa
2022-12-15 16:20:49 +01:00
parent 9df07b4bd7
commit 803b266e09

76
tcl.py
View File

@@ -7,6 +7,8 @@ import aiohttp
import asyncio import asyncio
import json import json
import base64 import base64
import difflib
class Config(BaseProxyConfig): class Config(BaseProxyConfig):
def do_update(self, helper: ConfigUpdateHelper) -> None: def do_update(self, helper: ConfigUpdateHelper) -> None:
@@ -23,6 +25,8 @@ class Tcl(Plugin):
@command.argument("pattern", pass_raw=True, required=True) @command.argument("pattern", pass_raw=True, required=True)
async def tclInfos(self, evt: MessageEvent, pattern: str) -> None: async def tclInfos(self, evt: MessageEvent, pattern: str) -> None:
await evt.mark_read() await evt.mark_read()
strToEncode = self.config["mail"] + ':' + self.config["password"]
base64string = base64.b64encode(strToEncode.encode('utf-8'))
if not pattern: if not pattern:
await evt.respond( await evt.respond(
""" """
@@ -40,8 +44,6 @@ class Tcl(Plugin):
""" """
) )
url = 'https://download.data.grandlyon.com/ws/rdata/tcl_sytral.tclalertetrafic_2/all.json?maxfeatures=200&start=1' url = 'https://download.data.grandlyon.com/ws/rdata/tcl_sytral.tclalertetrafic_2/all.json?maxfeatures=200&start=1'
strToEncode = self.config["mail"] + ':' + self.config["password"]
base64string = base64.b64encode(strToEncode.encode('utf-8'))
resp = await self.http.get(url, headers={'Authorization' : 'Basic ' + base64string.decode('utf-8')}) resp = await self.http.get(url, headers={'Authorization' : 'Basic ' + base64string.decode('utf-8')})
ans = await resp.text() ans = await resp.text()
try: try:
@@ -66,6 +68,76 @@ class Tcl(Plugin):
await evt.respond("<h3>Pas d'alerte sur cette ligne</h3>", allow_html=True) await evt.respond("<h3>Pas d'alerte sur cette ligne</h3>", allow_html=True)
except KeyError: except KeyError:
await evt.respond("Erreur d'analyse JSON ") await evt.respond("Erreur d'analyse JSON ")
elif pattern.__contains__("horaires"):
chunks = pattern.split(None, 1)
if len(chunks) != 2:
await evt.respond(
"""
!tcl horaires arrêt -> Retourne les horaires à l'arrêt
"""
)
return
with open("/home/tfa/maubot/tcl/tcl_sytral.tclarret.json") as file:
objet = json.load(file)
values = objet["values"]
arrets = []
for value in values:
arrets.append(value["nom"].lower())
arret = difflib.get_close_matches(chunks[1].lower(),arrets,n=1,cutoff=0.8)
if len(arret) == 0:
await evt.respond("Arrêt non trouvé")
return
Ids =[]
nomArret = ""
for value in values:
if value["nom"].lower() == arret[0]:
nomArret = value["nom"]
Ids.append(value["id"])
url = 'https://download.data.grandlyon.com/ws/rdata/tcl_sytral.tclpassagearret/all.json?maxfeatures=2000&start=1'
respText = "<h3>Prochains départs " + nomArret + " :</h3><ul>"
self.log.info(respText)
while len(url) > 0:
resp = await self.http.get(url, headers={'Authorization' : 'Basic ' + base64string.decode('utf-8')})
ans = await resp.text()
try:
resp.raise_for_status()
except aiohttp.ClientError as Error:
await evt.respond(str(Error))
return
objet = json.loads(ans)
try:
url = objet["next"]
except KeyError:
url = ""
values = objet["values"]
for value in values:
if value["id"] in Ids:
if value["type"] == "E": #Filtré sur les estimés et non théoriques
if value["coursetheorique"].split('-')[0] == "301A" :
transport = "A"
elif value["coursetheorique"].split('-')[0] == "303" :
transport = "C"
elif value["coursetheorique"].split('-')[0] == "325" :
transport = "F1"
elif value["coursetheorique"].split('-')[0] == "326" :
transport = "F2"
elif value["coursetheorique"].split('-')[0] == "304" :
transport = "D"
elif value["coursetheorique"].split('-')[0] == "302A" :
transport = "B"
else:
transport = value["coursetheorique"].split('-')[0][:-1]
respText += "<li>Ligne " + transport + " - direction " \
+ value["direction"] + " : " + value["delaipassage"] + "</li>"
self.log.info(respText)
respText += "</ul>"
await evt.respond(respText, allow_html=True)
@classmethod @classmethod
def get_config_class(cls) -> Type[BaseProxyConfig]: def get_config_class(cls) -> Type[BaseProxyConfig]:
return Config return Config