-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathviki_wip_cleaner.py
102 lines (80 loc) · 3.2 KB
/
viki_wip_cleaner.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Script de maintenance pour vikidia
# (C) Linedwell, 2011-2018
#
# Distribué sous licence GNU GPLv3
# Distributed under the terms of the GNU GPLv3 license
# http://www.gnu.org/licenses/gpl.html
import sys, getopt
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent
import mylogging
import re, time
from datetime import date, datetime, timedelta
import pywikibot
from pywikibot import pagegenerators
import callback
import logger
# Déclarations
site = pywikibot.Site('fr','vikidia')
# Traitement des nouvelles pages
def cleanWIP(delay):
limit = calcLimit(delay)
log = u''
wipCat = pywikibot.Category(site,u"Article en travaux")
wipPages = list(wipCat.articles(False))
pagesList = pagegenerators.PreloadingGenerator(wipPages) # On génère la liste des pages incluses dans la catégorie
pagesList = pagegenerators.NamespaceFilterPageGenerator(pagesList,[0]) #On ne garde que les articles (Namespace 0)
for page in pagesList:
try:
pageTemp = page.get()
except pywikibot.NoPage:
pywikibot.output(u"Page %s does not exist; skipping."
% page.title(asLink=True))
except pywikibot.IsRedirectPage:
pywikibot.output(u"Page %s is a redirect; skipping."
% page.title(asLink=True))
except pywikibot.LockedPage:
pywikibot.output(u"Page %s is locked; skipping."
% page.title(asLink=True))
else:
summary = u''
lastEdit = page.editTime()
if lastEdit < limit:
duration = calcDuration(lastEdit)
pageTemp, templateResult = removeTemplate(pageTemp)
summary = u"[[VD:Robot|Robot]] : Retrait du bandeau %s (article non modifié depuis plus de %s jours)" %(templateResult,duration.days)
pywikibot.showDiff(page.text, pageTemp)
page.text = pageTemp
print summary
page.save(summary)
return log
#Retourne la date avant laquelle on considère obsolète l'usage du modèle
def calcLimit(delay):
today = datetime.utcnow()
limite = today - timedelta(seconds=delay)
return limite
#Retourne le temps écoulé entre une date et le jour courant
def calcDuration(date):
today = datetime.utcnow()
duration = today - date
return duration
# Retrait du bandeau si besoin
def removeTemplate(pageTemp):
templateResult = ''
parser = re.compile(r'{{(En)?Trav(ail|aux)(?:\|.*?)?}}(?P<fin>\r\n|\n|\ )?',re.I | re.U | re.DOTALL)
searchResult = parser.search(pageTemp)
if searchResult:
pageTemp = parser.sub('',pageTemp,1)
templateResult = searchResult.group()
templateResult = templateResult.replace('\r\n','') #Retire les sauts de ligne contenus dans le modèle avant de l'ajouter au résumé
templateResult = templateResult.replace('\n','') #Correspond au second type de retour à la ligne
return pageTemp, templateResult
# Exécution
def main():
cleanWIP(delay=15552000)
if __name__ == "__main__":
try:
main()
finally:
pywikibot.stopme()