From 0580e5f950f47058b19fb8cb8a55381872d97ee5 Mon Sep 17 00:00:00 2001 From: Bastien Le Querrec <blq@laquadrature.net> Date: Sun, 17 Mar 2024 12:43:16 +0100 Subject: [PATCH] =?UTF-8?q?pref13:=20ajout=20du=20support=20de=20la=20pr?= =?UTF-8?q?=C3=A9fecture=20des=20Bouches-du-Rh=C3=B4ne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RAAspotter_pref13.py | 50 +++++++++++++++++++++++++ README.md | 1 + pref13.py | 88 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 RAAspotter_pref13.py create mode 100755 pref13.py diff --git a/RAAspotter_pref13.py b/RAAspotter_pref13.py new file mode 100644 index 0000000..8d1c269 --- /dev/null +++ b/RAAspotter_pref13.py @@ -0,0 +1,50 @@ +import os, sys + +from bs4 import BeautifulSoup +from urllib.parse import unquote + +from RAAspotter import RAAspotter + +class RAAspotter_pref13(RAAspotter): + + # Config + __HOST = 'https://www.bouches-du-rhone.gouv.fr' + __RAA_PAGE = f'{__HOST}/Publications/RAA-et-Archives' + __USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' + + def __init__(self, data_dir): + super().__init__(data_dir, self.__USER_AGENT) + self.enable_tor(10) + + def get_raa(self, keywords): + self.print_output('RAAspotter_pref13') + self.print_output(f'Termes recherchés: {keywords}') + + page_content = self.get_page(self.__RAA_PAGE).content + sub_pages = self.get_sub_pages(page_content, 'div.fr-card__body div.fr-card__content h2.fr-card__title a', self.__HOST) + raa_elements = [] + for page in sub_pages: + for element in self.get_raa_elements(self.get_page(page).content): + raa_elements.append(element) + self.parse_raa(raa_elements, keywords.split(',')) + + def get_raa_elements(self, page_content): + elements = [] + # On charge le parser + soup = BeautifulSoup(page_content, 'html.parser') + + # Pour chaque balise a, on regarde si c'est un PDF, et si oui on le parse + for a in soup.find_all('a', href=True): + if a['href'].endswith('.pdf'): + if a['href'].startswith('/'): + url = f"{self.__HOST}{a['href']}" + else: + url = a['href'] + + name = unquote(url.split('/')[-1]) + date = "date non renseignée" + filename = unquote(url.split('/')[-1]) + + raa = RAAspotter.RAA(url, date, name, filename) + elements.append(raa) + return elements diff --git a/README.md b/README.md index fc27916..8801fb1 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Il est possible de ne lancer l'analyse que pour une seule administration, en lan ## Administrations supportées - Préfecture de police de Paris (`ppparis.py`) +- Préfecture des Bouches-du-Rhône (`pref13.py`) ## Licence diff --git a/pref13.py b/pref13.py new file mode 100755 index 0000000..95cc42f --- /dev/null +++ b/pref13.py @@ -0,0 +1,88 @@ +import os +import argparse +import logging + +from RAAspotter import RAAspotter +from RAAspotter_pref13 import RAAspotter_pref13 + +# Config +__KEYWORDS = os.getenv('KEYWORDS') or 'vidéoprotection,caméras,captation,aéronef' +__DATA_DIR = os.path.dirname(os.path.abspath(__file__))+'/data/pref13/' +__SMTP_HOSTNAME = os.getenv('SMTP_HOSTNAME') or 'localhost' +__SMTP_USERNAME = os.getenv('SMTP_USERNAME') or '' +__SMTP_PASSWORD = os.getenv('SMTP_PASSWORD') or '' +__EMAIL_FROM = os.getenv('EMAIL_FROM') +__EMAIL_TO = os.getenv('EMAIL_TO') +if os.getenv('SMTP_PORT'): + __SMTP_PORT = int(os.getenv('SMTP_PORT')) +else: + __SMTP_PORT = 587 +if os.getenv('SMTP_STARTTLS'): + __SMTP_STARTTLS = True +else: + __SMTP_STARTTLS = False +if os.getenv('SMTP_SSL'): + __SMTP_SSL = True +else: + __SMTP_SSL = False + +# Début du script +parser = argparse.ArgumentParser(prog='pref13.py', description='Télécharge les RAA de la préfecture des Bouches-du-Rhône et recherche des mots-clés') +parser.add_argument('-k', '--keywords', action='store', help='liste des termes recherchés, séparés par une virgule (par défaut : vidéoprotection,caméras,captation,aéronef)') +parser.add_argument('--smtp-hostname', action='store', help='nom d\'hôte SMTP (par défaut : localhost)') +parser.add_argument('--smtp-username', action='store', help='nom d\'utilisateur SMTP (par défaut : vide)') +parser.add_argument('--smtp-password', action='store', help='mot de passe SMTP (par défaut : vide)') +parser.add_argument('--smtp-port', action='store', help='port SMTP (par défaut : 587)') +parser.add_argument('--smtp-starttls', action='store_true', help='connexion SMTP avec STARTTLS') +parser.add_argument('--smtp-ssl', action='store_true', help='connexion SMTP avec SSL') +parser.add_argument('-f', '--email-from', action='store', help='adresse de courrier électronique expéditrice des notifications') +parser.add_argument('-t', '--email-to', action='store', help='adresses de courrier électronique destinataires des notifications (séparées par une virgule)') +parser.add_argument('-v', action='store_true', help='relève le niveau de verbosité à INFO') +parser.add_argument('-vv', action='store_true', help='relève le niveau de verbosité à DEBUG') +args = parser.parse_args() + +if args.v or os.getenv('VERBOSE'): + logging.basicConfig(level=logging.INFO) + +if args.vv or os.getenv('VVERBOSE'): + logging.basicConfig(level=logging.DEBUG) + +if args.keywords: + __KEYWORDS = args.keywords + +if args.smtp_hostname: + __SMTP_HOSTNAME = args.smtp_hostname + +if args.smtp_username: + __SMTP_USERNAME = args.smtp_username + +if args.smtp_password: + __SMTP_PASSWORD = args.smtp_password + +if args.smtp_port: + __SMTP_PORT = int(args.smtp_port) + +if args.smtp_starttls: + __SMTP_STARTTLS = True + +if args.smtp_ssl: + __SMTP_SSL = True + +if args.email_from: + __EMAIL_FROM = args.email_from + +if args.email_to: + __EMAIL_TO = args.email_to + +# On crée le dossier de téléchargement +os.makedirs(__DATA_DIR, exist_ok=True) + +raa_spotter = RAAspotter_pref13(__DATA_DIR) +raa_spotter.get_raa(__KEYWORDS) + +if raa_spotter.found == True and __SMTP_HOSTNAME and __SMTP_USERNAME and __SMTP_PASSWORD and __SMTP_PORT and __EMAIL_TO and __EMAIL_FROM: + output = open(raa_spotter.output_file_path) + RAAspotter.mailer(__SMTP_HOSTNAME, __SMTP_USERNAME, __SMTP_PASSWORD, __SMTP_PORT, + __SMTP_STARTTLS, __SMTP_SSL, __EMAIL_FROM, __EMAIL_TO, + '[RAAspotter] [pref13] Nouveaux éléments trouvés', + output.read()) -- GitLab