-
Notifications
You must be signed in to change notification settings - Fork 1
/
pas.py
146 lines (107 loc) · 4.57 KB
/
pas.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Script de nettoyage automatique de la page des PàS
# (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
import time
import pywikibot
#Variables globales
site = pywikibot.Site('fr','wikipedia')
delimiterBegin = u"= Propositions =\n"
delimiterEnd = u"= Maintenance : mise à jour =\n"
delimiterBeginRegex = ur"=\s*Propositions\s*=\n"
delimiterEndRegex = ur"=\s*Maintenance : mise à jour\s*=\n"
summary = ""
#Créé la section PàS du lendemain
def pasNewSection(pageTemp):
global summary
month = [u"",u"janvier",u"février",u"mars",u"avril",u"mai",u"juin",u"juillet",u"août",u"septembre",u"octobre",u"novembre",u"décembre"]
pad = 1 #nombre de jours de decalage que l'on souhaite
dateD = time.localtime(time.time() + pad * 24 * 3600)
year = int(dateD.tm_year)
monthNum = int(dateD.tm_mon)
dayNum = int(dateD.tm_mday)
if pageTemp.find(u"== " + str(dayNum) + " " + month[monthNum] + " ==") == -1: #La section de dans 'pad' n'existe pas encore
pageTempBegin, pageTempEnd = re.split(delimiterEndRegex,pageTemp)
pageTempEnd = delimiterEnd + pageTempEnd
newSection = u"== " + str(dayNum) + " " + month[monthNum] + " ==\n"
newSection += u"{{En-tête section PàS|" + str(dayNum)+ "|" + month[monthNum] + "|" + str(year) + "}}\n\n"
newSection += u"{{Boîte déroulante/début|titre=Requêtes traitées}}\n{{Boîte déroulante/fin}}\n\n"
pageTemp = pageTempBegin + newSection + pageTempEnd
if summary != u'':
summary += u" ; initialisation de la section PàS du %s %s" %(dayNum,month[monthNum])
else:
summary += u"initialisation de la section PàS du %s %s" %(dayNum,month[monthNum])
else:
pywikibot.output(u"Aucune modification, la section du %s %s existe."
%(dayNum,month[monthNum]))
return pageTemp
#Archive les sections vidées
def pasRemoveSection(pageTemp):
global summary
pageTempBegin, pageTempBody = re.split(delimiterBeginRegex,pageTemp)
pageTempBegin += delimiterBegin
pageTempBody, pageTempEnd = re.split(delimiterEndRegex,pageTempBody)
pageTempEnd = delimiterEnd + pageTempEnd
section = re.split(r'(==\s*\d*(?:er)? \w*\s*==\n)',pageTempBody,flags=re.U)
parser = re.compile(ur'{{En-tête section PàS\|.*?}}\s*{{Boîte déroulante\/début\|.*?}}', re.U | re.I | re.M)
pageTempBody = u''
count = 0
for i in range(2,len(section),2):
result = parser.search(section[i])
if result:
section[i] = section[i-1] = ''
count += 1
if count > 0:
for s in section:
pageTempBody += s
pageTemp = pageTempBegin + pageTempBody + pageTempEnd
summary = u"archivage de %s section(s)" %(count)
return pageTemp
#Exécution
def main(argv):
global summary
archiveOnly = False
try:
opts, args = getopt.getopt(argv, 'a',['archive'])
except getopt.GetoptError:
print "usage: pas.py [-a]"
exit(2)
for opt, args in opts:
if opt in ('-a', '--archive'):
archiveOnly = True
summary = u''
target = u"Wikipédia:Pages à supprimer"
page = pywikibot.Page(site,target)
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:
pageTempNew = pasRemoveSection(pageTemp)
if not archiveOnly:
pageTempNew = pasNewSection(pageTempNew)
if pageTempNew != pageTemp:
page.text = pageTempNew
page.save("[[WP:Bot|Robot]] : " + summary)
else:
pywikibot.output("Aucune action aujourd'hui, archivage et section du lendemain non requis.")
if __name__ == "__main__":
try:
main(sys.argv[1:])
finally:
pywikibot.stopme()