Amélioration robustesse import gglink

This commit is contained in:
Jean-Marie Favreau 2025-03-19 21:47:56 +01:00
parent 91b584d5f4
commit cf4f506168
2 changed files with 14 additions and 5 deletions

View File

@ -322,6 +322,7 @@ class Extractor(ABC):
FacebookEventExtractor(), FacebookEventExtractor(),
GoogleCalendarLinkEventExtractor(), GoogleCalendarLinkEventExtractor(),
AssociationsCF(), AssociationsCF(),
ICALExtractor(),
EventNotFoundExtractor(), EventNotFoundExtractor(),
] ]
else: else:

View File

@ -1,6 +1,7 @@
import logging import logging
from datetime import datetime from datetime import datetime
from urllib.parse import parse_qs, urlparse from urllib.parse import parse_qs, urlparse
from html import unescape
import dateutil.parser import dateutil.parser
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
@ -26,6 +27,13 @@ class GGCalendar:
return result return result
def parse_date(d):
try:
return dateutil.parser.parse(d)
except Exception:
d = d.split("+")[0]
return dateutil.parser.parse(d)
def is_valid_event(self): def is_valid_event(self):
return self.start_day is not None and self.title is not None return self.start_day is not None and self.title is not None
@ -36,7 +44,7 @@ class GGCalendar:
params = GGCalendar.filter_keys(params) params = GGCalendar.filter_keys(params)
self.location = params["location"][0] if "location" in params else "" self.location = params["location"][0] if "location" in params else ""
self.title = ( self.title = unescape(
params["text"][0] params["text"][0]
if "text" in params if "text" in params
else params["title"][0] if "title" in params else "" else params["title"][0] if "title" in params else ""
@ -51,22 +59,22 @@ class GGCalendar:
if "dates" in params: if "dates" in params:
dates = [x.replace(" ", "+") for x in params["dates"][0].split("/")] dates = [x.replace(" ", "+") for x in params["dates"][0].split("/")]
if len(dates) > 0: if len(dates) > 0:
date = dateutil.parser.parse(dates[0]) date = GGCalendar.parse_date(dates[0])
self.start_day = date.date() self.start_day = date.date()
self.start_time = date.time() self.start_time = date.time()
if len(dates) == 2: if len(dates) == 2:
date = dateutil.parser.parse(dates[1]) date = GGCalendar.parse_date(dates[1])
self.end_day = date.date() self.end_day = date.date()
self.end_time = date.time() self.end_time = date.time()
else: else:
self.end_day = None self.end_day = None
self.end_time = None self.end_time = None
elif "date_start" in params: elif "date_start" in params:
date = dateutil.parser.parse(params["date_start"][0]) date = GGCalendar.parse_date(params["date_start"][0])
self.start_day = date.date() self.start_day = date.date()
self.start_time = date.time() self.start_time = date.time()
if "date_end" in params: if "date_end" in params:
dateend = dateutil.parser.parse(params["date_end"][0]) dateend = GGCalendar.parse_date(params["date_end"][0])
if dateend != date: if dateend != date:
self.end_day = dateend.date() self.end_day = dateend.date()
self.end_time = dateend.time() self.end_time = dateend.time()