WikiGuc
MediaWiki User Contributions Extractor
Cos’è?
WikiGuc è uno strumento per estrarre e archiviare in un database PostgreSQL locale i contributi degli utenti MediaWiki, inclusi i contributi globali su tutti i progetti Wikimedia (Wikipedia, Commons, Meta, Wikidata e altri). Consente di tracciare sistematicamente la storia editoriale di uno o più contributori con aggiornamenti incrementali.
Perché API live e non data dump?
I dump completi di Wikimedia pesano diversi terabyte. Estrarre i contributi di N=1 utente da N=tutti gli utenti è computazionalmente inefficiente. WikiGuc usa le API live di MediaWiki per ottenere dati mirati, in tempo reale e nel rispetto della netiquette API.
Architettura
graph TD
A[MediaWiki API] -->|Pywikibot| B[Extraction Layer]
C[XTools API] -->|globalcontribs| B
B -->|Contributi| D[PostgreSQL]
D -->|Query| E[Web Interface]
D -->|CLI| F[wikiguc CLI]
subgraph Storage
D
G[monitored_users]
H[wiki_projects]
I[user_contributions]
end
D --- G
D --- H
D --- I
style D fill:#336791,color:#fff
style B fill:#4C8BF5,color:#fff
Funzionalità principali
- Tracciamento multi-utente — Monitora i contributi di più utenti contemporaneamente
- Contributi globali — Supporto cross-wiki su tutti i progetti Wikimedia
- Aggiornamenti incrementali — Scarica solo i nuovi contributi dall’ultima estrazione, riducendo i tempi da ore a secondi
- Deduplicazione automatica — Constraint UNIQUE e
INSERT ... ON CONFLICT DO NOTHINGper idempotenza completa - API Etiquette — User-Agent corretto, rate limiting con exponential backoff, rispetto dei
maxlagdel server - Schema ibrido — Colonne relazionali indicizzate per query veloci + JSONB per la risposta API completa
Schema database
Tre tabelle normalizzate con schema ibrido relazionale-JSONB:
| Tabella | Contenuto |
|---|---|
| monitored_users | Utenti tracciati con timestamp ultimo aggiornamento |
| wiki_projects | Domini wiki normalizzati (en.wikipedia.org, commons.wikimedia.org, …) |
| user_contributions | Contributi con colonne relazionali + raw JSON completo |
La tabella user_contributions combina colonne indicizzate (mw_revid, page_title, revision_timestamp, size_bytes) con una colonna JSONB raw_api_response che preserva l’intera risposta API per flessibilità futura.
Estrazione a due livelli
| Livello | Strumento | Uso |
|---|---|---|
| Primario | Pywikibot | Framework ufficiale MediaWiki con paginazione automatica e rate limiting built-in |
| Fallback | XTools API | Endpoint globalcontribs per aggregazione cross-wiki in una singola chiamata |
CLI
wikiguc init # Crea tabelle database
wikiguc add-user "NomeUtente" # Aggiungi utente al tracciamento
wikiguc list-users # Lista utenti tracciati
wikiguc extract "NomeUtente" # Estrai contributi (wiki default)
wikiguc extract "NomeUtente" --global # Tutti i wiki (globale)
wikiguc extract "NomeUtente" --incremental # Solo nuovi contributi
wikiguc validate # Valida installazione
Interfaccia Web
A partire dalla versione 0.3.0, WikiGuc include un’interfaccia web basata su FastAPI con template Jinja2 per la visualizzazione dei contributi estratti, containerizzata con Docker Compose.
Stack tecnologico
- Python 3.9+ con Pywikibot 8.0+
- PostgreSQL 10+ con JSONB e indici GIN
- SQLAlchemy 2.0 + Alembic per ORM e migrazioni
- Click per CLI professionale
- Pydantic 2.0 per validazione configurazione
- FastAPI per interfaccia web (v0.3.0+)
- Docker Compose per deploy containerizzato
Stato del progetto
- Versione corrente: v0.3.0 (MVP Core Complete)
- Fase attuale: MVP — Multi-user, schema normalizzato, aggiornamenti incrementali, CLI, Docker, web interface
- Prossima fase: EPR (Enterprise Production Ready) — Job queue asincrona, dashboard React, monitoring Prometheus
WikiGuc consente di preservare e analizzare la storia editoriale dei contributori Wikimedia nel rispetto delle policy API.