View difference between Paste ID: i2ZYQBRD and
SHOW: | | - or go back to the newest paste.
1-
1+
#!/usr/bin/python
2
# -*- coding: utf-8  -*-
3
# Wikipedia:Bots/Requests_for_approval/Mobius_Bot_3
4
# Fixing reflist errors
5
6
import wikipedia
7
import re
8
import pagegenerators
9
import catlib
10
11
from optparse import OptionParser
12
parser = OptionParser()
13
parser.add_option("-d", action="store_true", dest="debugmode", default = False)
14
parser.add_option("-s", dest="singlepage", default = "")
15
parser.add_option("-p", dest="fromlinks", default = "")
16
parser.add_option("-c", action="store_true", dest="fromcat", default = False)
17
parser.add_option("-t", dest="fromtemplate", default = "")
18
(options, args) = parser.parse_args()
19
20
site = wikipedia.getSite()
21
starsList = [
22
u'bueno',
23
u'cyswllt[ _]erthygl[ _]ddethol', u'dolen[ _]ed',
24
u'destacado', u'destaca[tu]',
25
u'enllaç[ _]ad',
26
u'enllaz[ _]ad',
27
u'leam[ _]vdc',
28
u'legătură[ _]a[bcf]',
29
u'liamm[ _]pub',
30
u'lien[ _]adq',
31
u'lien[ _]ba',
32
u'liên[ _]kết[ _]bài[ _]chất[ _]lượng[ _]tốt',
33
u'liên[ _]kết[ _]chọn[ _]lọc',
34
u'ligam[ _]adq',
35
u'ligoelstara',
36
u'ligoleginda',
37
u'link[ _][afgu]a', u'link[ _]adq', u'link[ _]f[lm]', u'link[ _]km',
38
u'link[ _]sm', u'linkfa',
39
u'na[ _]lotura',
40
u'nasc[ _]ar',
41
u'tengill[ _][úg]g',
42
u'ua',
43
u'yüm yg',
44
u'רא',
45
u'وصلة مقالة جيدة',
46
u'وصلة مقالة مختارة',
47
]
48
def main():
49
    Rparam = re.compile(ur'\|Gemeindeschlüssel[\s]*=([\s]*[0-9]+[\s]*)+\|', re.I) 
50
    Rreflist = re.compile(ur'(\{\{reflist[|}]|<references\/>)', re.I)
51
    Rrefcomment = re.compile(ur'<!--(.*?)<ref[^>]*>.+?</ref>', re.I)
52
    Rrefs = re.compile(ur'<ref[^>]*>.+?</ref>', re.I)
53
    if options.debugmode:
54
        wikipedia.output('\03{purple}Debug mode activated: no changes will be made\03{default}') 
55
    for page in generator():
56
        if ((not page.isRedirectPage()) and not Rreflist.search(page.get()) and (Rrefs.search(page.get()) or Rparam.search(page.get())) and (len(re.findall(ur'<!--(.*?)<ref>.+?</ref>', page.get())) != len(re.findall('<ref>.+?</ref>', page.get())) or len(re.findall(ur'<!--(.*?)<ref>.+?</ref>', page.get())) == 0)):
57
			newtext = page.get()
58
			categoriesInside = wikipedia.getCategoryLinks(newtext, site)
59
			newtext = wikipedia.removeCategoryLinks(newtext, site)
60
			interwikiInside = wikipedia.getLanguageLinks(newtext, site)
61
			newtext = wikipedia.removeLanguageLinks(newtext, site)
62
			
63
			if (site.language()==u'nn'):
64
				newtext = newtext.replace(nn_iw_msg, '')
65
			
66
			newtext += u"\n%s" % '\n==References==\n{{reflist}}'
67
			newtext = wikipedia.replaceCategoryLinks(newtext, categoriesInside, site, True)
68
			if (site.language()==u'nn'):
69
				newtext = newtext + u'\n' + nn_iw_msg
70
			
71
			allstars = []
72
			starstext = wikipedia.removeDisabledParts(page.get())
73
			for star in starsList:
74
				regex = re.compile('(\{\{(?:template:|)%s\|.*?\}\}[\s]*)' % star,
75
												   re.I)
76
				found = regex.findall(starstext)
77
				if found != []:
78
					newtext = regex.sub('', newtext)
79
					allstars += found
80
			if allstars != []:
81
				newtext = newtext.strip()+'\r\n\r\n'
82
				allstars.sort()
83
				for element in allstars:
84
					newtext += '%s\r\n' % element.strip()
85
			
86
			newtext = wikipedia.replaceLanguageLinks(newtext, interwikiInside, site)
87
			while (re.search(ur'({{[^}]*}})[\s]*(==References==\n\{\{reflist\}\})', newtext) and not re.search(ur'(\][ ]*|[*:]+[ ]*)({{[^}]*}})[\s]*(==References==\n\{\{reflist\}\})', newtext)):
88
				newtext = re.sub(ur'({{[^}]*}})[\s]*(==References==\n\{\{reflist\}\})',ur'\2\n\1', newtext)
89
            
90
			if not options.debugmode:
91
				page.put(newtext, 'Bot: Adding {{reflist}}, article has references but no corresponding display tag/template')
92
            
93
			else:
94
				wikipedia.output('\03{lightgreen}' + page.title() + '\03{default} \n')
95
				wikipedia.showDiff(page.get(), newtext)
96
        else:
97
            wikipedia.output('\03{lightblue}' + page.title() + ': Page already has reflist, or has no references\03{default}')
98
def generator():
99
    if options.singlepage: return [wikipedia.Page(site, options.singlepage),]
100
    elif options.fromlinks: return pagegenerators.LinkedPageGenerator(wikipedia.Page(site, options.fromlinks))
101
    elif options.fromcat: return pagegenerators.CategorizedPageGenerator(catlib.Category(site, 'Category:Pages_with_missing_references_list'))
102
    elif options.fromtemplate: return wikipedia.Page(site, options.fromtemplate).getReferences(True, True, True)
103
if __name__ == '__main__':
104
    try:
105
        main()
106
    finally:
107
        wikipedia.stopme()