diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 12e7001b8c9fb57f922c4d5a3e25e02965bb4c38..2255da035631da527edb8a0509314efa49038533 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 c15abee5118ea437c6496c2c93e4eff64c15479d..987a8a51c6df19f201054fc06ab2962a4e9ed178 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 0000000000000000000000000000000000000000..d70406f8868b3659d65e1cec82b85ab76174e68b --- /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 f7d4d4351bcf6b140d26dd1b81bc6f4e4f1d2823..abaaf5cad985d9169b91e41d5608bc5e9809e401 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 6210b1d33d12f4ce420ef5a501d0f491a999b6b5..abded2220457354378effa19d96516558a17449c 100755 --- a/cli.py +++ b/cli.py @@ -41,6 +41,7 @@ available_prefs = [ 'ppparis', 'pref04', 'pref06', + 'pref09', 'pref13', 'pref34', 'pref35',