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