From 6f7028bb0ea8733cc7862c828832f2b58b3d3c75 Mon Sep 17 00:00:00 2001 From: SDJ GeeK Date: Mon, 15 Jun 2020 21:05:27 +0200 Subject: [PATCH 1/3] WIP: Aller chercher les cookies directement dans le navigateur --- purge-registres-deces-insee/settings.py | 2 +- purge-registres-deces-insee/site_eglise.py | 57 +++++++++++-------- .../trouver_decedes.py | 16 +++--- requirements.txt | 1 + 4 files changed, 43 insertions(+), 33 deletions(-) diff --git a/purge-registres-deces-insee/settings.py b/purge-registres-deces-insee/settings.py index 0ffb11e..71ea436 100644 --- a/purge-registres-deces-insee/settings.py +++ b/purge-registres-deces-insee/settings.py @@ -25,7 +25,7 @@ chemin_base_donnees = "/chemin/vers/fichier-des-personnes-decedees.sqlite" numeros_unites = [47823, 67745, 31456] # Cookie de session compte SDJ -cookie = "" +cookie = "/home/julien/.mozilla/firefox/615tua7r.lds/cookies.sqlite" # Chemin vers le répertoire de sortie chemin_repertoire_sortie = "/chemin/vers/repertoire-de-sortie" diff --git a/purge-registres-deces-insee/site_eglise.py b/purge-registres-deces-insee/site_eglise.py index 7d4e860..66a2f73 100644 --- a/purge-registres-deces-insee/site_eglise.py +++ b/purge-registres-deces-insee/site_eglise.py @@ -3,36 +3,43 @@ """ import requests +import browser_cookie3 -def get_member_list(unit_number, cookie): - """Recevoir la liste des membres +class SiteEglise: - :param unit_number: numéro de l'unité (paroisse, branche) - :param cookie: le cookie de session pour l'accès au site - :returns: la liste des membres sous forme d'objet JSON + def __init__(self, cookie_path=None): + """ - """ - r = requests.get('https://lcr.churchofjesuschrist.org/services/umlu/report/member-list', - params={'lang': "fra", 'unitNumber': unit_number}, - headers={'Accept': "application/json", - 'Cookie': cookie}) - r.raise_for_status() - return r.json() + :param cookie_path: chemin vers le répertoire où inscrire les fichiers de sortie + """ + self.cookie_jar = browser_cookie3.firefox(cookie_file=cookie_path) + def get_member_list(self, unit_number): + """Recevoir la liste des membres -def get_member_profile(member_id, cookie): - """Recevoir les informations sur un membre + :param unit_number: numéro de l'unité (paroisse, branche) + :returns: la liste des membres sous forme d'objet JSON - :param member_id: ID du membre - :param cookie: le cookie de session pour l'accès au site - :returns: les informations sur le membre sous forme d'objet JSON + """ + r = requests.get('https://lcr.churchofjesuschrist.org/services/umlu/report/member-list', + params={'lang': "fra", 'unitNumber': unit_number}, + headers={'Accept': "application/json", + 'Cookie': self.cookie_jar}) + r.raise_for_status() + return r.json() - """ - r = requests.get(f'https://lcr.churchofjesuschrist.org/records/member-profile/service/{member_id}', - params={'lang': "fra"}, - headers={'Accept': "application/json", - 'Cookie': cookie, - 'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"}) - r.raise_for_status() - return r.json() + def get_member_profile(self, member_id): + """Recevoir les informations sur un membre + + :param member_id: ID du membre + :returns: les informations sur le membre sous forme d'objet JSON + + """ + r = requests.get(f'https://lcr.churchofjesuschrist.org/records/member-profile/service/{member_id}', + params={'lang': "fra"}, + headers={'Accept': "application/json", + 'Cookie': self.cookie_jar, + 'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"}) + r.raise_for_status() + return r.json() diff --git a/purge-registres-deces-insee/trouver_decedes.py b/purge-registres-deces-insee/trouver_decedes.py index 441e8c6..1525674 100755 --- a/purge-registres-deces-insee/trouver_decedes.py +++ b/purge-registres-deces-insee/trouver_decedes.py @@ -38,30 +38,32 @@ Version : 3.0 """ +import argparse import os import peewee import requests from bdd_insee import BddInsee -import site_eglise +from site_eglise import SiteEglise import settings as param -def trouver_decedes(chemin_base_donnees, numeros_unites, cookie, chemin_repertoire_sortie): +def trouver_decedes(chemin_base_donnees, numeros_unites, chemin_repertoire_sortie, cookie_path=None): """Recherche les personnes décédées dans les registres :param chemin_base_donnees: chemin vers le fichier SQLite :param numeros_unites: liste des numéros d'unités à analyser - :param cookie: le cookie de session pour l'accès au site :param chemin_repertoire_sortie: chemin vers le répertoire où inscrire les fichiers de sortie + :param cookie_path: chemin vers la base de donnée des cookies """ base_insee = BddInsee(chemin_base_donnees) + site_eglise = SiteEglise(cookie_path) # Boucler sur la liste des unités for unite in numeros_unites: print(f"Unité {unite}") # Récupérer la liste des membres - members = site_eglise.get_member_list(unite, cookie=cookie) + members = site_eglise.get_member_list(unite) # Préparer le fichier de sortie output_file = os.path.join(chemin_repertoire_sortie, f"liste_membres_decedes_unite_{unite}.txt") @@ -76,7 +78,7 @@ def trouver_decedes(chemin_base_donnees, numeros_unites, cookie, chemin_repertoi ville_registre = None # S'il s'agit d'une femme mariée, trouver son nom de jeune fille if member['isSpouse']: - member_profile = site_eglise.get_member_profile(member['legacyCmisId'], cookie=cookie) + member_profile = site_eglise.get_member_profile(member['legacyCmisId']) maiden_name = member_profile['individual']['maidenNameGroup']['name1']['family'] ville_registre = member_profile['individual']['birthPlace'] try: @@ -97,7 +99,7 @@ def trouver_decedes(chemin_base_donnees, numeros_unites, cookie, chemin_repertoi feminin = "" for person in query: if not ville_registre: - member_profile = site_eglise.get_member_profile(member['legacyCmisId'], cookie=cookie) + member_profile = site_eglise.get_member_profile(member['legacyCmisId']) ville_registre = member_profile['individual']['birthPlace'] if not ville_registre: ville_registre = "" @@ -114,4 +116,4 @@ décédé{feminin} le {person.jour_deces:0>2}/{person.mois_deces:0>2}/{person.an if __name__ == "__main__": - trouver_decedes(param.chemin_base_donnees, param.numeros_unites, param.cookie, param.chemin_repertoire_sortie) + trouver_decedes(param.chemin_base_donnees, param.numeros_unites, param.chemin_repertoire_sortie, param.cookie) diff --git a/requirements.txt b/requirements.txt index 2934903..b0630ba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ peewee requests +browser_cookie3 \ No newline at end of file From ac82d33c3a42ec8d944e759485dc5405ad4d97f5 Mon Sep 17 00:00:00 2001 From: SDJ GeeK Date: Tue, 16 Jun 2020 23:27:47 +0200 Subject: [PATCH 2/3] Recherche des cookies OK. Utilisation d'argparse et suppression de settings.py --- README.md | 50 +++++++++---------- purge-registres-deces-insee/site_eglise.py | 8 +-- .../trouver_decedes.py | 9 +++- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 3775e95..b84b57c 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ exemple) pour s'assurer que les registres restent à jour. ### Logiciels - Git -- Python 3.6 +- Python 3.6+ - Virtualenv Testé uniquement sur GNU/Linux (Ubuntu 18.4) @@ -65,45 +65,43 @@ pip install -r requirements.txt ## Utilisation -Le fichier ```purge-registres-deces-insee/settings.py``` contient les -paramètres à configurer : +Aller sur le [site de l'Église](https://lcr.churchofjesuschrist.org), +et se connecter au compte SDJ. Puis lancer le script. + +```bash +source localenv/bin/activate +python purge-registres-deces-insee/trouver_deces.py chemin_base_donnees chemin_repertoire_sortie numeros_unites +``` + +Avec : - chemin_base_donnees : Le chemin vers le [fichier téléchargé](https://git.roflcopter.fr/sdjgeek/purge-registres-deces-insee/-/wikis/home#t%C3%A9l%C3%A9charger-la-base-de-donn%C3%A9e) +- chemin_repertoire_sortie : Le chemin vers le répertoire qui + contiendra la fichiers de sortie + - numeros_unites : La liste des unités que le programme doit tester. La liste commence par le caractère '['. Les numéros d'unités sont séparés par des virgules. La liste se termine par le caractère ']'. Par exemple [47823, 67745, 31456] -- cookie : Les cookies de la session au compte SDJ. Pour obtenir ces - cookies il faut : +Le script devrait trouver seul le cookie de session permettant de +consulter la liste des membres. Mais en cas d'échec, il est possible +de lui donner le chemin vers le fichier SQLite que Firefox utilise +pour stocker les cookies avec l'option '-c'. En règle générale ce +fichier se trouve le répertoire : -1- Ouvrir Firefox +- sur linux : + "~/.mozilla/firefox/.default/cookies.sqlite" -2- Ouvrir les outils de développement : CTRL + MAJ + E +- sur windows : + "C:\Users\\AppData\Local\Mozilla\Firefox\Profiles\.default\cookies.sqlite" -3- Aller sur le site des outils pour greffiers : https://lds.org/lcr - -4- Entrer identifiant et mot de passe SDJ - -5- Aller dans la liste des membres - -6- Dans l'outil de développement, cliquer sur la dernière ligne - -7- Dans le panneau de droite, dans la section "En-tête de la requête", -rechercher le champ "cookie" - -8- Copier la valeur contenue dans ce champ - -- chemin_repertoire_sortie : Le chemin vers le répertoire qui - contiendra la fichiers de sortie - -Une fois la configuration effectuée, lancer le script : +Par exemple : ```bash -. localenv/bin/activate -python purge-registres-deces-insee/trouver_deces.py +python purge-registres-deces-insee/trouver_deces.py ~/Documents/fichier-des-personnes-decedees.sqlite ~/Documents/ 123,854 -c ~/.mozilla/firefox/8h3jsedf.default/cookies.sqlite ``` Le script mettra un peu de temps à s'exécuter. En fin d'exécution, le diff --git a/purge-registres-deces-insee/site_eglise.py b/purge-registres-deces-insee/site_eglise.py index 66a2f73..ce98c64 100644 --- a/purge-registres-deces-insee/site_eglise.py +++ b/purge-registres-deces-insee/site_eglise.py @@ -24,8 +24,8 @@ class SiteEglise: """ r = requests.get('https://lcr.churchofjesuschrist.org/services/umlu/report/member-list', params={'lang': "fra", 'unitNumber': unit_number}, - headers={'Accept': "application/json", - 'Cookie': self.cookie_jar}) + headers={'Accept': "application/json"}, + cookies=self.cookie_jar) r.raise_for_status() return r.json() @@ -39,7 +39,7 @@ class SiteEglise: r = requests.get(f'https://lcr.churchofjesuschrist.org/records/member-profile/service/{member_id}', params={'lang': "fra"}, headers={'Accept': "application/json", - 'Cookie': self.cookie_jar, - 'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"}) + 'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"}, + cookies=self.cookie_jar) r.raise_for_status() return r.json() diff --git a/purge-registres-deces-insee/trouver_decedes.py b/purge-registres-deces-insee/trouver_decedes.py index 1525674..4e747f6 100755 --- a/purge-registres-deces-insee/trouver_decedes.py +++ b/purge-registres-deces-insee/trouver_decedes.py @@ -45,7 +45,6 @@ import requests from bdd_insee import BddInsee from site_eglise import SiteEglise -import settings as param def trouver_decedes(chemin_base_donnees, numeros_unites, chemin_repertoire_sortie, cookie_path=None): @@ -116,4 +115,10 @@ décédé{feminin} le {person.jour_deces:0>2}/{person.mois_deces:0>2}/{person.an if __name__ == "__main__": - trouver_decedes(param.chemin_base_donnees, param.numeros_unites, param.chemin_repertoire_sortie, param.cookie) + parser = argparse.ArgumentParser(description='Recherche des personnes décédées dans les registres.') + parser.add_argument('chemin_base_donnees', type=str, help="chemin vers la base de données") + parser.add_argument('chemin_repertoire_sortie', type=str, help="chemin vers le répertoire de sortie") + parser.add_argument('numeros_unites', type=str, help="numéros des l'unités à traiter, séparés par des virgules (ex: 123,753,469)") + parser.add_argument('--cookie', '-c', type=str, help='chemin vers la base de donnée des cookies de Firefox') + args = parser.parse_args() + trouver_decedes(args.chemin_base_donnees, args.numeros_unites.split(','), args.chemin_repertoire_sortie, args.cookie) From e798bbcc914dff6e977309aee7941eb5bde4680e Mon Sep 17 00:00:00 2001 From: SDJ GeeK Date: Tue, 16 Jun 2020 23:32:13 +0200 Subject: [PATCH 3/3] Version 4.0 --- CHANGELOG.md | 4 ++++ purge-registres-deces-insee/trouver_decedes.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee6c487..6e13467 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +### [v4.0] - 2020-06-16 +- Recherche automatique des cookies dans firefox +- Supression du fichier settings.py, remplacé par argparse + ### [v3.1] - 2020-06-08 - Amélioration de la documentation diff --git a/purge-registres-deces-insee/trouver_decedes.py b/purge-registres-deces-insee/trouver_decedes.py index 4e747f6..ccb37c5 100755 --- a/purge-registres-deces-insee/trouver_decedes.py +++ b/purge-registres-deces-insee/trouver_decedes.py @@ -33,8 +33,8 @@ Comment utilise ce programme : ------------------------------------------------------------------------------------------------------------------------ Auteur : SDJ GeeK -Date : 1 juin 2020 -Version : 3.0 +Date : 16 juin 2020 +Version : 4.0 """