From 1616da46e8fe6930dd3049cb91eda49d89d2dc26 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 19 Aug 2022 13:59:43 +0200 Subject: [PATCH] New SNCF module --- icons/sncf.png | Bin 0 -> 48472 bytes main.py | 4 +- modules/sncf.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 icons/sncf.png create mode 100644 modules/sncf.py diff --git a/icons/sncf.png b/icons/sncf.png new file mode 100644 index 0000000000000000000000000000000000000000..54b6750a7261aed2edd0826bc68ed7ae5ee07ba7 GIT binary patch literal 48472 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

-+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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 4d9e185..5683186 100644 --- a/main.py +++ b/main.py @@ -81,8 +81,10 @@ def main(): # alerts alerts = [] - from modules.weather import WeatherAlerts alerts += [a for a in RATPWeatherModule().gen_alerts()] + from modules.sncf import SNCFWeatherModule + alerts += SNCFWeatherModule().gen_alerts("normandie") + from modules.weather import WeatherAlerts alerts += WeatherAlerts().gen_alerts() from modules import AlertsModule diff --git a/modules/sncf.py b/modules/sncf.py new file mode 100644 index 0000000..01e048a --- /dev/null +++ b/modules/sncf.py @@ -0,0 +1,101 @@ +from datetime import datetime, timedelta, timezone +import base64 +import json +import os +import urllib.parse +import urllib.request +import re + +from PIL import Image, ImageDraw, ImageFont, ImageOps + +class SNCFAPI: + + CLEANR = re.compile('<.*?>') + + def __init__(self): + self.baseurl = "https://www.sncf.com/api/iv" + self.auth = base64.b64encode(b"admin:$2y$10$QvxWSS4f5DIFSkAmuBoV9OJG3M2bhec9d3F2.YnULBMtpzKAq2KS.").decode() + + self._cached_file = ".sncf-%d-%s.cache" + self.cache_time = 5 + + def get_icon(size): + height = int(size * 0.531) + img = Image.open("icons/sncf.png").resize((size, height)) + r,g,b,a = img.split() + rgb_image = Image.merge('RGB', (r,g,b)) + inverted_image = ImageOps.invert(rgb_image) + r2,g2,b2 = inverted_image.split() + + return Image.merge('RGBA', (r2,g2,b2,a)) + + def get_train_status(self, numero, date): + cache_file = self._cached_file % (numero, date.strftime("%Y-%m-%d")) + # Read the mod time + statinfo = None + try: + statinfo = os.stat(cache_file) + except: + pass + + if statinfo is None or datetime.fromtimestamp(statinfo.st_mtime, tz=timezone.utc) + timedelta(minutes=self.cache_time) < datetime.now(tz=timezone.utc): + # Do the request and save it + req = urllib.request.Request(self.baseurl + "/1.0/infoVoy/rechercherListeCirculations?numero=%d&dateCirculation=%s&codeZoneArret&typeHoraire=TEMPS_REEL" % (numero, date.strftime("%Y-%m-%d")), headers={'Authorization': "Basic " + self.auth}) + try: + with urllib.request.urlopen(req) as f: + with open(cache_file, 'wb') as fd: + fd.write(f.read()) + except ConnectionResetError: + pass + + # Retrieve cached data + res = {} + with open(cache_file) as f: + res = json.load(f) + + return res["reponseRechercherListeCirculations"]["response"]["listeResultats"]["resultat"][0]["donnees"]["listeCirculations"]["circulation"][0] + + def get_weather(self, region): + cache_file = self._cached_file % (0, region) + # Read the mod time + statinfo = None + try: + statinfo = os.stat(cache_file) + except: + pass + + if statinfo is None or datetime.fromtimestamp(statinfo.st_mtime, tz=timezone.utc) + timedelta(minutes=self.cache_time) < datetime.now(tz=timezone.utc): + # Do the request and save it + req = urllib.request.Request(self.baseurl + "/edito/bandeaux?region=%s" % (region), headers={'Authorization': "Basic " + self.auth}) + try: + with urllib.request.urlopen(req) as f: + with open(cache_file, 'wb') as fd: + fd.write(f.read()) + except ConnectionResetError: + pass + + # Retrieve cached data + res = {} + with open(cache_file) as f: + res = json.load(f) + + return res + + +class SNCFWeatherModule: + + def __init__(self): + pass + + def gen_alerts(self, region): + alerts = [] + + weather = SNCFAPI().get_weather(region) + for alert in weather: + if alert["type"] != "perturbation": + continue + + yield { + "description": re.sub(SNCFAPI.CLEANR, '\n', alert["content"]).strip(), + "icon": SNCFAPI.get_icon, + }