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