From d9f7df28c82737b1d715311dc245a9955c25d923 Mon Sep 17 00:00:00 2001 From: Bastien Le Querrec <blq@laquadrature.net> Date: Thu, 4 Apr 2024 16:35:10 +0200 Subject: [PATCH] =?UTF-8?q?pref09:=20ajout=20de=20la=20pr=C3=A9fecture=20d?= =?UTF-8?q?e=20l'Ari=C3=A8ge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 5 +++ Makefile | 4 +- RAAspotter_pref09.py | 91 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 9 +++-- cli.py | 1 + 5 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 RAAspotter_pref09.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 12e7001..2255da0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -112,6 +112,11 @@ test_pref04: PREF: "pref04" extends: .default_pref +test_pref09: + variables: + PREF: "pref09" + extends: .default_pref + test_pref13: variables: PREF: "pref13" diff --git a/Makefile b/Makefile index c15abee..987a8a5 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ -make: ppparis pref04 pref06 pref13 pref34 pref35 pref38 pref59 pref62 pref65 pref69 pref81 pref83 pref976 +make: ppparis pref04 pref06 pref09 pref13 pref34 pref35 pref38 pref59 pref62 pref65 pref69 pref81 pref83 pref976 ppparis: python cli.py --pref ppparis pref04: python cli.py --pref pref04 pref06: python cli.py --pref pref06 +pref09: + python cli.py --pref pref09 pref13: python cli.py --pref pref13 pref34: diff --git a/RAAspotter_pref09.py b/RAAspotter_pref09.py new file mode 100644 index 0000000..d70406f --- /dev/null +++ b/RAAspotter_pref09.py @@ -0,0 +1,91 @@ +import os +import datetime + +from bs4 import BeautifulSoup +from urllib.parse import unquote + +from RAAspotter import RAAspotter + + +class RAAspotter_pref09(RAAspotter): + + # Config + __HOST = 'https://www.ariege.gouv.fr' + __RAA_PAGE = f'{__HOST}/Publications/Recueil-des-actes-administratifs' \ + '/Recueils-des-Actes-Administratifs-de-l-Ariege-a-partir-du-28' \ + '-avril-2015' + __USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) ' \ + 'Gecko/20100101 Firefox/115.0' + full_name = 'Préfecture de l\'Ariège' + short_code = 'pref09' + + 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_pref09') + self.print_output(f'Termes recherchés: {keywords}') + self.print_output('') + + pages_to_parse = [] + + # Les RAA de l'Ariège sont éparpillés sur des sous-pages par mois. + # Donc on parse la page principale à la recherche des sous-pages. + sub_pages = self.get_sub_pages_with_pager( + self.__RAA_PAGE, + 'div.fr-card__body div.fr-card__content h2.fr-card__title ' + 'a.fr-card__link', + 'ul.fr-pagination__list li ' + 'a.fr-pagination__link.fr-pagination__link--next', + 'div.fr-card__body div.fr-card__content div.fr-card__end ' + 'p.fr-card__detail', + self.__HOST + )[::-1] + + # On filtre par date les sous-pages pour limiter les requêtes + for sub_page in sub_pages: + guessed_date = datetime.datetime.strptime( + sub_page['details'].replace('Publié le ', '').strip(), + '%d/%m/%Y' + ) + guessed_date.replace(day=1) + if guessed_date >= self.not_before: + pages_to_parse.append(sub_page['url']) + + # On parse les pages contenant des RAA + for page in pages_to_parse: + page_content = self.get_page(page, 'get').content + raa_elements = self.get_raa_elements(page_content) + self.parse_raa(raa_elements, keywords.split(',')) + self.mailer() + + def get_raa_elements(self, page_content): + elements = [] + # On charge le parser + soup = BeautifulSoup(page_content, 'html.parser') + + # On récupère chaque balise a + for a in soup.select( + 'div.fr-downloads-group.fr-downloads-group--bordered ul li a' + ): + if a.get('href') and a['href'].endswith('.pdf'): + if a['href'].startswith('/'): + url = f"{self.__HOST}{a['href']}" + else: + url = a['href'] + + url = unquote(url) + name = a.find('span').previous_sibling.replace( + 'Télécharger ', + '' + ).strip() + date = datetime.datetime.strptime( + a.find('span').get_text().split(' - ')[-1].strip(), + '%d/%m/%Y' + ) + filename = url.split('/')[-1] + + raa = RAAspotter.RAA(url, date, name, filename) + elements.append(raa) + return elements diff --git a/README.md b/README.md index f7d4d43..abaaf5c 100644 --- a/README.md +++ b/README.md @@ -33,10 +33,11 @@ Il est possible de ne lancer l'analyse que pour une seule administration, avec l ## Administrations supportées - Préfecture de police de Paris (identifiant : `ppparis`) -- Préfecture des Alpes-de-Haute-Provence (identifiant : `pref04`) -- Préfecture des Alpes-Maritimes (identifiant : `pref06`) +- Préfecture des Alpes-de-Haute-Provence (identifiant : `pref04`) +- Préfecture des Alpes-Maritimes (identifiant : `pref06`) +- Préfecture de l'Ariège (identifiant : `pref09`) - Préfecture des Bouches-du-Rhône (identifiant : `pref13`) -- Préfecture de l'Hérault (identifiant : `pref34`) +- Préfecture de l'Hérault (identifiant : `pref34`) - Préfecture d'Ille-et-Vilaine (identifiant : `pref35`) - Préfecture de l'Isère (identifiant : `pref38`) - Préfecture du Nord (identifiant : `pref59`) @@ -45,7 +46,7 @@ Il est possible de ne lancer l'analyse que pour une seule administration, avec l - Préfecture du Rhône (identifiant : `pref69`) - Préfecture du Tarn (identifiant : `pref81`) - Préfecture du Var (identifiant : `pref83`) -- Préfecture de Mayotte (identifiant : `pref976`) +- Préfecture de Mayotte (identifiant : `pref976`) ## Licence diff --git a/cli.py b/cli.py index 6210b1d..abded22 100755 --- a/cli.py +++ b/cli.py @@ -41,6 +41,7 @@ available_prefs = [ 'ppparis', 'pref04', 'pref06', + 'pref09', 'pref13', 'pref34', 'pref35', -- GitLab