Ajout des horaires à l'arrêt
This commit is contained in:
76
tcl.py
76
tcl.py
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user