#!/usr/bin/python
# -*- coding: utf-8 -*-
# Wikipedia:Bots/Requests_for_approval/Mobius_Bot_3
# Fixing reflist errors
import wikipedia
import re
import pagegenerators
import catlib
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-d", action="store_true", dest="debugmode", default = False)
parser.add_option("-s", dest="singlepage", default = "")
parser.add_option("-p", dest="fromlinks", default = "")
parser.add_option("-c", action="store_true", dest="fromcat", default = False)
parser.add_option("-t", dest="fromtemplate", default = "")
(options, args) = parser.parse_args()
site = wikipedia.getSite()
starsList = [
u'bueno',
u'cyswllt[ _]erthygl[ _]ddethol', u'dolen[ _]ed',
u'destacado', u'destaca[tu]',
u'enllaç[ _]ad',
u'enllaz[ _]ad',
u'leam[ _]vdc',
u'legătură[ _]a[bcf]',
u'liamm[ _]pub',
u'lien[ _]adq',
u'lien[ _]ba',
u'liên[ _]kết[ _]bài[ _]chất[ _]lượng[ _]tốt',
u'liên[ _]kết[ _]chọn[ _]lọc',
u'ligam[ _]adq',
u'ligoelstara',
u'ligoleginda',
u'link[ _][afgu]a', u'link[ _]adq', u'link[ _]f[lm]', u'link[ _]km',
u'link[ _]sm', u'linkfa',
u'na[ _]lotura',
u'nasc[ _]ar',
u'tengill[ _][úg]g',
u'ua',
u'yüm yg',
u'רא',
u'وصلة مقالة جيدة',
u'وصلة مقالة مختارة',
]
def main():
Rparam = re.compile(ur'\|Gemeindeschlüssel[\s]*=([\s]*[0-9]+[\s]*)+\|', re.I)
Rreflist = re.compile(ur'(\{\{reflist[|}]|<references\/>)', re.I)
Rrefcomment = re.compile(ur'<!--(.*?)<ref[^>]*>.+?</ref>', re.I)
Rrefs = re.compile(ur'<ref[^>]*>.+?</ref>', re.I)
if options.debugmode:
wikipedia.output('\03{purple}Debug mode activated: no changes will be made\03{default}')
for page in generator():
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)):
newtext = page.get()
categoriesInside = wikipedia.getCategoryLinks(newtext, site)
newtext = wikipedia.removeCategoryLinks(newtext, site)
interwikiInside = wikipedia.getLanguageLinks(newtext, site)
newtext = wikipedia.removeLanguageLinks(newtext, site)
if (site.language()==u'nn'):
newtext = newtext.replace(nn_iw_msg, '')
newtext += u"\n%s" % '\n==References==\n{{reflist}}'
newtext = wikipedia.replaceCategoryLinks(newtext, categoriesInside, site, True)
if (site.language()==u'nn'):
newtext = newtext + u'\n' + nn_iw_msg
allstars = []
starstext = wikipedia.removeDisabledParts(page.get())
for star in starsList:
regex = re.compile('(\{\{(?:template:|)%s\|.*?\}\}[\s]*)' % star,
re.I)
found = regex.findall(starstext)
if found != []:
newtext = regex.sub('', newtext)
allstars += found
if allstars != []:
newtext = newtext.strip()+'\r\n\r\n'
allstars.sort()
for element in allstars:
newtext += '%s\r\n' % element.strip()
newtext = wikipedia.replaceLanguageLinks(newtext, interwikiInside, site)
while (re.search(ur'({{[^}]*}})[\s]*(==References==\n\{\{reflist\}\})', newtext) and not re.search(ur'(\][ ]*|[*:]+[ ]*)({{[^}]*}})[\s]*(==References==\n\{\{reflist\}\})', newtext)):
newtext = re.sub(ur'({{[^}]*}})[\s]*(==References==\n\{\{reflist\}\})',ur'\2\n\1', newtext)
if not options.debugmode:
page.put(newtext, 'Bot: Adding {{reflist}}, article has references but no corresponding display tag/template')
else:
wikipedia.output('\03{lightgreen}' + page.title() + '\03{default} \n')
wikipedia.showDiff(page.get(), newtext)
else:
wikipedia.output('\03{lightblue}' + page.title() + ': Page already has reflist, or has no references\03{default}')
def generator():
if options.singlepage: return [wikipedia.Page(site, options.singlepage),]
elif options.fromlinks: return pagegenerators.LinkedPageGenerator(wikipedia.Page(site, options.fromlinks))
elif options.fromcat: return pagegenerators.CategorizedPageGenerator(catlib.Category(site, 'Category:Pages_with_missing_references_list'))
elif options.fromtemplate: return wikipedia.Page(site, options.fromtemplate).getReferences(True, True, True)
if __name__ == '__main__':
try:
main()
finally:
wikipedia.stopme()