Elie243 claimed this task.
Elie243 added a comment.
Guide technique Archiving Bot
Architecture du système
Vue d'ensemble
Archiving Bot est construit selon une architecture modulaire avec les
composants suivants :
– Module principal (`bot.py`)
– Gestionnaire de configuration (`config.py`)
– Utilitaires (``).
– Base de données SQLite (``).
Composants principaux
1. Classe ArchivingBot
class ArchivingBot:
def __init__(self):
self.site = pywikibot.Site("wikidata", "wikidata")
self.repo = self.site.data_repository()
self.logger = setup_logger()
self.db_engine = create_engine('sqlite:///archives.db')
Responsabilités
– Gestion de la connexion à Wikidata
– Surveillance des changements récents
– Traitement des URLs
– Archivage via Internet Archive.
– Gestion de la base de données
2. Modèle ArchivedURL
class ArchivedURL(Base):
__tablename__ = 'archived_urls'
original_url = Column(String, primary_key=True)
archived_url = Column(String, nullable=False)
wikidata_id = Column(String, nullable=False)
archived_at = Column(DateTime, default=datetime.utcnow)
is_successful = Column(Boolean, default=True)
retry_count = Column(Integer, default=0)
Structure de la base de données
– Table : `archived_urls`
– Index : `original_url` (clé primaire)
– Contraintes : `nullable=False` sur les champs critiques
Flux de données
1. Détection des URLs
def process_recent_changes(self, limit: int = BATCH_SIZE):
for change in self.site.recentchanges(limit=limit):
if change['type'] == 'edit' and change['namespace'] == 0:
2. Processus d'archivage
1. Validation de l'URL
2. Tentative d'archivage
3. Vérification de l'archive
4. Mise à jour de Wikidata
5. Enregistrement dans la base de données
3. Gestion des erreurs
– Système de retry avec backoff exponentiel.
– Journalisation détaillée
– Sauvegarde de l'état
API et intégrations
1. API Wikidata
– Utilisation de `pywikibot`
– Endpoints : Recent Changes, Claims
– Rate limiting intégré
2. API Internet Archive
– Endpoint : `/save`
– Format : GET avec paramètres.
– Headers : User-Agent personnalisé
Sécurité
1. Gestion des identifiants
– Stockage sécurisé dans `user-password.py`
– Pas de stockage en clair.
– Rotation des mots de passe recommandée.
2. Validation des données
– Sanitization des URLs
– Vérification des permissions
– Protection contre les injections SQL.
Performance
1. Optimisations
– Batch processing des changements.
– Indexation de la base de données
– Mise en cache des résultats
2. Monitoring
– Métriques de performance
– Logs détaillés
– Alertes sur erreurs critiques
Tests
1. Tests unitaires
def test_url_validation():
assert is_valid_url("https://example.com") == True
assert is_valid_url("invalid-url") == False
2. Tests d'intégration
– Tests de connexion à Wikidata
– Tests d'archivage
– Tests de base de données
Maintenance
1. Nettoyage
– Suppression des archives obsolètes.
– Optimisation de la base de données
– Rotation des logs
2. Mises à jour
– Gestion des dépendances
– Migrations de base de données
– Mises à jour de sécurité
Développement
1. Standards de code
– PEP 8
– Docstrings complets.
– Type hints
2. Workflow Git
– Branches feature
– Pull requests
– Revues de code
Dépannage avancé
1. Debugging
– Logs détaillés
– Points d'arrêt
– Profilage
2. Réparation
– Restauration de la base de données
– Réinitialisation des connexions
– Nettoyage des fichiers temporaires.
Extensions
1. Points d'extension
– Nouveaux services d'archivage
– Formats de sortie alternatifs
– Intégrations supplémentaires
2. Plugins
– Architecture modulaire
– API stable
– Documentation des hooks
TASK DETAIL
https://phabricator.wikimedia.org/T390358
EMAIL PREFERENCES
https://phabricator.wikimedia.org/settings/panel/emailpreferences/
To: Elie243
Cc: Elie243, Pabloawiki, Eti229, Wisdom-Hassan, Aklapper, pywikibot-bugs-list,
Paul26, mevo, Danny_Benjafield_WMDE, S8321414, Astuthiodit_1, karapayneWMDE,
Invadibot, PotsdamLamb, Jyoo1011, maantietaja, JohnsonLee01, SHEKH, Dijkstra,
Khutuck, Nintendofan885, Akuckartz, Zkhalido, Aram, Viztor, Nandana, Wenyi,
Lahi, Gq86, GoranSMilovanovic, QZanden, Tbscho, KimKelting, MayS, LawExplorer,
Mdupont, JJMC89, Dvorapa, _jensen, rosalieper, Altostratus, Avicennasis,
Hannolans, Scott_WUaS, mys_721tx, Wikidata-bugs, Xqt, Hydriz, aude, jayvdb,
Nemo_bis, Lydia_Pintscher, Masti, Alchimista, Mbch331
_______________________________________________
pywikibot-bugs mailing list -- [email protected]
To unsubscribe send an email to [email protected]