#-*- coding:utf-8 -*-
import wikipedia
import urllib
import sys
import pagegenerators
import catlib
import interwiki
import re
import time
def main():
#Données
site = wikipedia.getSite('fr','wikipedia')
category = u"Modèle effectif équipe nationale de football féminin"
temp = wikipedia.Page(site,u'Utilisateur:Sisyph/Exceptions palette')
exceptions = temp.get()
#Main
cat = catlib.Category(site, category)
lst2 = cat.articlesList(True)
d = len(lst2)
for p in pagegenerators.PreloadingGenerator(lst2,1000):
if p.isRedirectPage(): p = p.getRedirectTarget()
pagename = p.title()
d = d-1
if site.messages():
message = raw_input(u'Un message est arrivé, nimporte quelle touche pour continuer')
elif not re.search(pagename,exceptions) and re.search('Palette',pagename): #Ignore les modèles-exceptions référencés dans Utilisateur:Sisyph/Exceptions palette
textmodel = p.get()
namemodel = p.titleWithoutNamespace()
modelsanspal = namemodel.replace(u'Palette ',u'')
wikipedia.output(namemodel)
print d
lienintern = p.linkedPages() #récupère liens internes de la palette
for pp in pagegenerators.PreloadingGenerator(lienintern,1000):
edit =0
pagename = pp.title()
if pp.isRedirectPage():
pp = pp.getRedirectTarget()
if pp.exists() and not re.search(u'(titre|dessous) *= *.*\[\[.'+pagename[1:],textmodel): #exception des titres de l'infobox, majuscule ou minuscule première lettre
textpage = pp.get()
textpage = re.sub(u'{{([Mm]odèle|[Tt]emplate):',u'{{',textpage)
if textpage.find(namemodel)<0 and textpage.find(modelsanspal)<0 and not re.search("\d{4}",pp.title()): #Elimine les pages avec le modèle cible mais pas ses redirects et les articles années (attention aux titre avec des parenthèses, ne pas utilise re)
model = pp.templates() #récupère modèle de la page
wikipedia.output(pagename)
#print model
listmodel = []
listmodel2 = []
for m in model:
m1 = wikipedia.Page(site,u'Modèle:'+m)
listmodel.append(m1)
#wikipedia.output(m)
for mm in pagegenerators.PreloadingGenerator(listmodel,1000):
if mm.isRedirectPage():
print 'redirect'
pagenameredirect = mm.titleWithoutNamespace()
mm = mm.getRedirectTarget()
pagename = mm.titleWithoutNamespace()
wikipedia.output(pagename)
pagenamesanpal = namemodel.replace(u'Palette ',u'')
if textpage.count(u'{{'+pagenameredirect+u'}}')==1 and pagename[:8]==u'Palette ':
print u'corrige'
textpage = textpage.replace(u'{{'+pagenameredirect+u'}}',u'{{'+pagename+u'}}')
listmodel2.append(mm.titleWithoutNamespace())
#wikipedia.output(mm.titleWithoutNamespace())
modelsanspal = namemodel.replace(u'Palette ',u'')
if not namemodel in listmodel2 and not re.search(modelsanspal,textpage):
print u'############## pas le modele dans ################'
wikipedia.output(pp.title())
if re.search(u'{{[Pp]alette',textpage):
edit = 1
if (textpage.count(u'{{Palette|')+textpage.count(u'{{palette|'))==1:
if re.search(u'{{[Pp]alette\|.*}}',textpage):
inter = re.search(u'{{[Pp]alette\|(.*)}}',textpage).group(1)
newtext = re.sub(u'{{[Pp]alette\|.*}}',u'{{Palette|'+inter+u'|'+modelsanspal+u'}}',textpage)
elif not re.search(u'{{[Pp]alette\|',textpage):
newtext = textpage.replace(u'{{Palette ',u'{{'+namemodel+u'}}\n{{Palette ',1)
elif re.search(u'{{[Pp]ortail',textpage) and (textpage.count(u'{{Portail')+textpage.count(u'{{portail'))==1:
newtext = re.sub(u'{{[Pp]ortail',u'{{Palette|'+modelsanspal+u'}}\n{{Portail',textpage)
edit =1
if edit==1 and not site.messages():
wikipedia.showDiff(pp.get(), newtext)
comment = u'Bot, ajoute [[Modèle:'+namemodel+u']]'
choice = 'u'
choice = wikipedia.inputChoice(u'upload, Skip', [ 'upload', 'Skip' ], ['u', 'S'], 's')
if choice == 'u':
pp.put(newtext,comment)
if __name__ == '__main__':
try:
main()
finally:
wikipedia.stopme()