192 lines
8.3 KiB
Python
192 lines
8.3 KiB
Python
|
"""
|
||
|
Copyright (c) 2020 Sdj Geek
|
||
|
|
||
|
Voir le fichier LICENSE
|
||
|
------------------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
Ce programme permet de comparer le fichier des personnes décédées établi par l'INSEE avec les registre de membres de
|
||
|
l'Église, afin de déterminer si figurent dans nos registre des personnes décédées.
|
||
|
|
||
|
L'INSEE reçoit des communes les décès enregistrés. Le fichier des personnes décédées établi par l'INSEE est en accès
|
||
|
libre sur le site https://www.data.gouv.fr.
|
||
|
|
||
|
Comment utilise ce programme :
|
||
|
1) Demander le ficher de l'INSEE à cette adresse : sdjgeek@protonmail.com
|
||
|
2) Installer les dépendance du programme : "pip install requests peewee"
|
||
|
3) Configurer les paramètres du programme (un peu plus bas)
|
||
|
- chemin_base_donnees : Le chemin vers le fichier téléchargé sur le site data.gouv.fr
|
||
|
- 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
|
||
|
1- Ouvrir Firefox
|
||
|
2- Ouvrir les outils de développement : CTRL + MAJ + E
|
||
|
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 paneau 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
|
||
|
4) Exécuter le programme : "python3.6 trouver_decedes.py"
|
||
|
|
||
|
------------------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
Auteur : SDJ GeeK <sdjgeek@protonmail.com>
|
||
|
Date : 16 mai 2020
|
||
|
Version : 1.0
|
||
|
|
||
|
------------------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
Journal des versions
|
||
|
|
||
|
v1.0 (2020/05/16)
|
||
|
Première publication
|
||
|
|
||
|
"""
|
||
|
|
||
|
###
|
||
|
# Paramètres
|
||
|
|
||
|
# Chemin complet vers le fichier contenant les registres de l'INSEE
|
||
|
chemin_base_donnees = "/chemin/vers/fichier-des-personnes-decedees.sqlite"
|
||
|
|
||
|
# Numéro des l'unités à contrôler (par exemple [47823, 67745, 31456])
|
||
|
# Beziers 63789, Carcassonne 85774, Montauban 226122, Montpellier 83895, Nimes 72850, Perpignan 75698, Rodez 333824, Tarbes 65471, Capitole 111848, Concorde 263923
|
||
|
numeros_unites = [63789, 111848]
|
||
|
|
||
|
# Cookie de session compte SDJ
|
||
|
cookie = ""
|
||
|
|
||
|
# Chemin vers le répertoire de sortie
|
||
|
chemin_repertoire_sortie = "/chemin/vers/repertoire-de-sortie"
|
||
|
|
||
|
# Fin des paramètres. Ne pas modifier plus loin.
|
||
|
###
|
||
|
|
||
|
import os
|
||
|
import peewee
|
||
|
import requests
|
||
|
|
||
|
##
|
||
|
# Texte inscrit dans le fichier de sortie
|
||
|
output_template = """
|
||
|
{full_name} dans nos registres
|
||
|
{last_name}, {first_name} dans la liste des décés
|
||
|
né{feminin} le {jour_naissance:0>2}/{mois_naissance:0>2}/{annee_naissance:0>4}
|
||
|
décédé{feminin} le {jour_deces:0>2}/{mois_deces:0>2}/{annee_deces:0>4}
|
||
|
"""
|
||
|
|
||
|
###
|
||
|
# Base de donnée INSEE
|
||
|
database = peewee.SqliteDatabase(chemin_base_donnees)
|
||
|
|
||
|
|
||
|
class Person(peewee.Model):
|
||
|
last_name = peewee.CharField()
|
||
|
first_name = peewee.CharField()
|
||
|
is_woman = peewee.BooleanField()
|
||
|
annee_naissance = peewee.IntegerField()
|
||
|
mois_naissance = peewee.IntegerField()
|
||
|
jour_naissance = peewee.IntegerField()
|
||
|
code_lieu_naissance = peewee.CharField()
|
||
|
commune_naissance = peewee.CharField()
|
||
|
pays_naissance = peewee.CharField()
|
||
|
annee_deces = peewee.IntegerField()
|
||
|
mois_deces = peewee.IntegerField()
|
||
|
jour_deces = peewee.IntegerField()
|
||
|
code_lieu_deces = peewee.CharField()
|
||
|
numero_act_deces = peewee.CharField()
|
||
|
|
||
|
class Meta:
|
||
|
database = database
|
||
|
|
||
|
|
||
|
def find_person(first_name, last_name, maiden_name, annee_naissance, mois_naissance, jour_naissance):
|
||
|
if maiden_name:
|
||
|
return Person.select().where((Person.annee_naissance == int(annee_naissance))
|
||
|
& (Person.mois_naissance == int(mois_naissance))
|
||
|
& (Person.jour_naissance == int(jour_naissance))
|
||
|
& (Person.first_name.contains(first_name.upper()))
|
||
|
& ((Person.last_name.contains(last_name.upper()))
|
||
|
| Person.last_name.contains(maiden_name.upper())))
|
||
|
else:
|
||
|
return Person.select().where((Person.annee_naissance == int(annee_naissance))
|
||
|
& (Person.mois_naissance == int(mois_naissance))
|
||
|
& (Person.jour_naissance == int(jour_naissance))
|
||
|
& (Person.first_name.contains(first_name.upper()))
|
||
|
& (Person.last_name.contains(last_name.upper())))
|
||
|
|
||
|
|
||
|
###
|
||
|
# Registres de l'Église
|
||
|
def get_member_list(unit_number, cookie):
|
||
|
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()
|
||
|
|
||
|
|
||
|
def get_member_profile(member_id, cookie):
|
||
|
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()
|
||
|
|
||
|
|
||
|
###
|
||
|
# Programme principal
|
||
|
|
||
|
# Boucler sur la liste des unités
|
||
|
for unite in numeros_unites:
|
||
|
print(f"Unité {unite}")
|
||
|
# Récupérer la liste des membres
|
||
|
members = get_member_list(111848, cookie=cookie)
|
||
|
|
||
|
# Préparer le fichier de sortie
|
||
|
output_file = os.path.join(chemin_repertoire_sortie, f"liste_membres_decedes_unite_{unite}.txt")
|
||
|
with open(output_file, 'w') as out_file:
|
||
|
# Boucler sur la liste des membres
|
||
|
for member in members:
|
||
|
# Lire les noms et date de naissance
|
||
|
full_name = member['nameListPreferredLocal']
|
||
|
full_birthdate = member['birth']['date']['date']
|
||
|
maiden_name = None
|
||
|
# S'il s'agit d'une femme mariée, trouver son nom de jeune fille
|
||
|
if member['isSpouse']:
|
||
|
member_profile = get_member_profile(member['legacyCmisId'], cookie=cookie)
|
||
|
maiden_name = member_profile['individual']['maidenNameGroup']['name1']['family']
|
||
|
try:
|
||
|
last_name, first_name = full_name.split(',')
|
||
|
annee_naissance, mois_naissance, jour_naissance = full_birthdate.split('-')
|
||
|
except ValueError:
|
||
|
print(f"Error with member [{full_name}, {full_birthdate}]")
|
||
|
continue
|
||
|
first_name = first_name.strip().split(' ')[0]
|
||
|
last_name = last_name.strip().split(' ')[0]
|
||
|
query = find_person(first_name, last_name, maiden_name, annee_naissance, mois_naissance, jour_naissance)
|
||
|
if maiden_name:
|
||
|
full_name = f"{full_name} née {maiden_name}"
|
||
|
if member['sex'] == "F":
|
||
|
feminin = "e"
|
||
|
else:
|
||
|
feminin = ""
|
||
|
for person in query:
|
||
|
text = output_template.format(full_name=full_name,
|
||
|
last_name=person.last_name.capitalize(),
|
||
|
first_name=person.first_name.capitalize(),
|
||
|
jour_naissance=person.jour_naissance,
|
||
|
mois_naissance=person.mois_naissance,
|
||
|
annee_naissance=person.annee_naissance,
|
||
|
jour_deces=person.jour_deces,
|
||
|
mois_deces=person.mois_deces,
|
||
|
annee_deces=person.annee_deces,
|
||
|
feminin=feminin)
|
||
|
print(text)
|
||
|
out_file.write(text)
|