Bot Wikidata qui contribue les données de mandats parlementaires français depuis Poligraph vers Wikidata.
Poligraph agrège des données officielles françaises (data.gouv.fr, API Sénat, HATVP) pour enrichir les fiches de politiciens. Aujourd'hui Poligraph consomme Wikidata mais ne contribue pas en retour.
Ce bot boucle la boucle : les données vérifiées de sources officielles sont poussées vers Wikidata, améliorant la qualité des données ouvertes sur les politiciens français pour tout le monde.
Le bot suit un pipeline en 4 étapes :
FETCH → Lire les mandats depuis la base Poligraph (lecture seule)
DIFF → Comparer avec le snapshot local → produire un changeset
RECONCILE → Vérifier l'état Wikidata actuel (anti-doublon)
WRITE → Appliquer les modifications via wikibase-edit
Plutôt que de tout réécrire à chaque exécution, le bot maintient un snapshot de ce qu'il a déjà poussé. À chaque run, il ne pousse que les changements :
| Action | Condition | Résultat |
|---|---|---|
ADD |
Nouveau mandat, absent du snapshot | Création d'un claim P39 |
UPDATE |
Mandat existant, qualifiers changés (ex: date de fin ajoutée) | Mise à jour du qualifier |
SKIP |
Aucun changement | Rien |
- P39 (position held) : mandats de député et sénateur
- Qualifiers : P580 (début), P582 (fin)
- Références : P248 (stated in) + P854 (reference URL) + P813 (retrieved)
- Sources : data.assemblee-nationale.fr, senat.fr API
git clone https://github.com/ironlam/poligraph-wikibot.git
cd poligraph-wikibot
npm install
cp .env.example .env# Base de données Poligraph (lecture seule)
DATABASE_URL=postgresql://readonly_user:password@host:5432/poligraph
# Identifiants bot Wikidata (Special:BotPasswords)
# Format : Username@BotPasswordName / token généré
WIKIDATA_BOT_USERNAME=PoliGraphBot@PoliGraphBot
WIKIDATA_BOT_PASSWORD=your_generated_bot_password_token
# Options
DRY_RUN=true # true par défaut (aucune écriture)
WIKIDATA_INSTANCE=https://test.wikidata.org # test.wikidata.org par défaut# Dry run (par défaut) — affiche les edits sans les appliquer
npm run sync
# Limiter à 50 edits
npm run sync -- --limit=50
# Mode live (écriture réelle sur Wikidata)
DRY_RUN=false npm run sync
# Lancer les tests
npm test=== Poligraph Wikibot ===
Mode: DRY RUN
Date: 2026-02-27
1. Fetching mandates from Poligraph DB...
Found 1247 parliamentary mandates with Wikidata IDs
2. Computing diff against snapshot...
ADD: 1247 | UPDATE: 0 | SKIP: 0
3. DRY RUN — would perform these edits:
ADD Q182764 (Marine Le Pen): Q3044918 [2024-07-07 -> current]
ADD Q3055816 (Bruno Retailleau): Q19803890 [2023-10-01 -> current]
...
Done.
src/
├── config/
│ ├── wikidata.ts # P-IDs, Q-IDs des positions parlementaires
│ └── sources.ts # URLs et items Wikidata des sources officielles
├── db/
│ ├── types.ts # Types des mandats Poligraph
│ └── reader.ts # Connexion read-only à la DB
├── diff/
│ ├── types.ts # Types snapshot, changeset, diff
│ ├── snapshot.ts # Lecture/écriture du snapshot JSON
│ └── compute.ts # Calcul du diff (ADD/UPDATE/SKIP)
├── wikidata/
│ ├── client.ts # Wrapper wikibase-edit (auth, maxlag, rate limit)
│ └── write.ts # Écriture de claims P39 avec qualifiers et références
├── bot/
│ └── run.ts # Orchestrateur principal
└── index.ts # Point d'entrée CLI
Chaque mandat parlementaire est poussé comme un statement P39 :
Item: Q182764 (Marine Le Pen)
Claim: P39 = Q3044918 (membre de l'Assemblée nationale française)
├── P580 = 2024-07-07 (start time)
└── P582 = [vide si en cours]
Reference:
├── P248 = Q19938912 (Assemblée nationale)
├── P854 = https://data.assemblee-nationale.fr/acteurs/deputes-en-exercice
└── P813 = 2026-02-27 (retrieved)
La réconciliation (matchingQualifiers: ['P580']) évite les doublons : si un claim P39 existe déjà avec la même date de début, il n'est pas recréé.
Le workflow GitHub Actions (.github/workflows/sync.yml) :
- Déclenchement :
repository_dispatchdepuis politic-tracker après le sync quotidien, ouworkflow_dispatchmanuel - Dry-run par défaut pour
repository_dispatch - Snapshot : commité automatiquement après chaque run live
Le bot suit le processus standard Wikidata:Bots :
- Tests sur test.wikidata.org
- Demande sur Wikidata:Requests for permissions/Bot
- Test run de 50-250 edits sur Wikidata réel
- Revue communautaire (~1-2 semaines)
- Attribution du flag bot
La demande se fait sur Wikidata:Requests for permissions/Bot/PoliGraphBot :
=== PoliGraphBot ===
'''Operator:''' {{User|PoliGraphBot}}
'''Task/s:''' Add and update P39 (position held) claims for French parliamentary mandates (députés, sénateurs) with qualifiers (P580/P582) and sourced references (P248+P854+P813).
'''Code:''' https://github.com/ironlam/poligraph-wikibot
'''Function details:'''
* Reads verified mandate data from Poligraph (poligraph.fr), sourced from data.assemblee-nationale.fr and senat.fr API
* Diff-based: only pushes changes (new mandates, updated end dates), never removes existing claims
* Reconciliation via matchingQualifiers on P580 (start date) to prevent duplicates
* Every claim includes full references: P248 (stated in) + P854 (reference URL) + P813 (retrieved date)
* Rate-limited with maxlag=5, respects Wikidata server load
* Open source (MIT), dry-run mode by default- P4100 — Groupes parlementaires
- P4703 — Identifiants HATVP
- P102 — Appartenance politique
- P18 — Photos officielles
- Détection bidirectionnelle (corrections communautaires Wikidata → Poligraph)
- Poligraph — Plateforme de transparence politique
- Issue #212 — Issue source
- wikibase-edit — Bibliothèque d'écriture Wikidata
- Wikidata:Bots — Politique des bots