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() |