# -*- coding: utf-8 -*-
#Author : Darkoneko may 2009. Largely inspired of http://fr.wikipedia.org/wiki/Utilisateur:Darkoneko/ImageLinkErasor.py 's code (see file for authors)
# take a category full of templates.
# subst all of them in all pages (only one edit per page)
import wikipedia, pagegenerators, catlib
import config, replace, re, sys, urllib, codecs
site = wikipedia.getSite()
catOfTemplates = raw_input("category of templates to subst (sans catégorie: devant) : ")
logUrl = "/w/api.php?format=xml&action=query&list=categorymembers&cmlimit=5000&cmnamespace=10&cmtitle=category:%s" % urllib.quote(catOfTemplates)
wikipedia.output( logUrl )
txt = wikipedia.getSite().getUrl(logUrl)
findDeleted = re.compile(u'title="[^"]+"')
deletedPics = findDeleted.findall(txt)
wikipedia.output(u"%s templates trouvés. " % ( len(deletedPics)) )
listInput = []
for template in deletedPics:
template = re.sub(u'title="Modèle:([^"]+)"','\g<1>', template )
template = urllib.unquote(template)
template = template.replace("'","\'").replace("&", "&").replace(""", "\"")
listInput.append( template ) #on remplie un tableau avec les noms traités
#print template
#unique regex : cherche tous les modeles dans tous les liens
regexpSubst = '{{(%s)}}' % ( "|".join(listInput) )
replaceSubst = u'{{subst:\g<1>}}'
nbre = len(listInput)
for compteur in range(0, nbre) :
nom_ref = listInput[compteur]
nom_ref = urllib.unquote(nom_ref.strip())
#pages incluant le modele
url = u"/w/api.php?format=xml&action=query&eilimit=5000&list=embeddedin&einamespace=0|4|6|10|12|14|100&eititle=template:%s" % urllib.quote(nom_ref.encode("utf-8"))
txt = wikipedia.getSite().getUrl(url)
regexRelatedPages = re.compile(u' title="(?P<title>[^"]+)"')
relatedPages = regexRelatedPages.findall(txt)
nb_pages = len(relatedPages)
if nb_pages == 0: #aucun lien trouvé, au suivant
wikipedia.output(u"Aucune page liée pour \03{lightblue}%s\03{default}" % nom_ref)
continue
wikipedia.output(u"%s Page(s) liée(s) pour \03{lightyellow}%s\03{default}" % (nb_pages, nom_ref) )
#suppression pour chaque page
for i in range(0, nb_pages) :
wikipedia.setAction(u"Robot: subst de templates inutiles")
replaceList = [
(regexpSubst, replaceSubst, True), #sans confirmation
]
bot = ReplaceRobotModified( relatedPages[i], replaceList, [], False, regex=True)
bot.run()