#!/usr/bin/python
# -*- coding: utf8 -*-
##########
# 27/02/12 - Par -Nmd
# Ce script me permet de remanier les bandeaux {{m:Catégorie XXX}}
# Pour l'instant, il les pages que je lui donne dans un générateur (ligne 78)
# Il crée ensuite pour chaque page un texte incluant tout les bandeaux donnés dans un dico (ligne 40)
# C'est assez brouillon voir incohérent pour l'instant, mais ça marche parfaitement
# Ce script n'écrit pas sur Wikipédia mais affiche le résultat de chaque page
import os, codecs
from wikipedia import *
import urllib, catlib
import pagegenerators
import re
language = "fr"
family = "wikipedia"
mynick = "-Nmdbot"
site = getSite(language,family)
### FONCTION DE DETECTION AVEC regex lié
## TYPES DE CAS
# SANS MULTI-BANDEAU
exp1 = r"^(|.|\n)*\{\{Cat.gorie.*}}"
def findSansMulti():
print page.title() + ' : Sans multi'
page.multi = False
findType()
# AVEC BANDEAU MULTI
exp2 = r"\{\{Multi bandeau\|.*}}"
def findMulti():
print page.title() + ' : Bandeau multiple'
page.multi = True
findType()
# AVEC PLUSIEURS BANDEAU
exp3 = r".*(\{\{Cat.gorie.*}}(\n|.)*){2,3}"
def findBandeau():
print page.title() + ' : Plusieurs bandeaux'
## LISTE DES BANDEAUX VOULUS
desired = ['entreprises', 'rock', 'hip-hop', 'reggae']
# LISTE EN str POUR REGEX
tempList = u''
desiredStr = u''
for i in range(len(desired)):
desiredStr = desiredStr + desired[i]
## TYPE(S) DE BANDEAUX PRESENTS
# FONCTION DE DETECTION DE TOUT LES BANDEAUX
def findType():
if re.match(exp4, pagetext):
rock()
if re.match(exp5, pagetext):
hiphop()
if re.match(exp6, pagetext):
entreprises()
# AVEC BANDEAU ROCK
exp4 = r"(\n|.)*\{\{(|.*\|)Cat.gorie rock(|\|.*)}}(\n|.)*"
def rock():
print page.title() + ' : Bandeau rock'
page.bandeau.append('rock')
#print re.sub(r"(\{\{)(Cat.gorie.*)(}})", r"\1Mutli bandeau|\2\3", pagetext)
# AVEC BANDEAU HIP-HOP
exp5 = r"(\n|.)*\{\{(|.*\|)Cat.gorie hip-hop(|\|.*)}}(\n|.)*"
def hiphop():
print page.title() + ' : Bandeau hip-hop'
page.bandeau.append('hip-hop')
# AVEC BANDEAU ENTRPRISES
exp6 = r"(\n|.)*\{\{(|.*\|)Cat.gorie entreprises(|\|.*)}}(\n|.)*"
def entreprises():
print page.title() + ' : Bandeau entreprises'
page.bandeau.append('entreprises')
### ACTIONS
gen = pagegenerators.PrefixingPageGenerator(u'-Nmdbot/Bac à sable/Page', 2)
for page in gen:
pagetext = page.get()
page.bandeau = []
if re.match(exp1, pagetext):
findSansMulti()
if re.match(exp2, pagetext):
findMulti()
if re.search(exp3, pagetext):
findBandeau()
if page.multi==False:
if len(page.bandeau)==1:
print u'Un seul bandeau trouvé'
print 'ChgMlti :'+re.sub(r"(\{\{)(Cat.gorie.*)(}})", r"\1Multi bandeau|\2\3", pagetext)
newtext = re.sub(r"(\{\{)(Cat.gorie.*)(}})", r"\1Multi bandeau|\2\3", pagetext)
while len(page.bandeau)!=len(desired):
for i in desired:
if page.bandeau[0]!=i:
newtext = re.sub(r"^((?:|.|\n)*\{\{Multi bandeau)(\|Cat.gorie .*){1,}(}}(?:|.|\n)*)$", r"\1\2"+u'|Catégorie '+ i +r"\3", newtext)
print newtext
page.bandeau.append(i)
else:
newtext = re.sub(r"(\{\{)(Cat.gorie.*)(}})", r"", pagetext)
newtext = re.sub(r"^((:?|.|\n)*)$", r"{{Multi bandeau}}\n\1", newtext)
for i in page.bandeau:
tempList = tempList + i
for j in desired:
if (re.match(i, desiredStr) is None) and (re.match(i, tempList)):
newtext = re.sub(r"^(\{\{Multi bandeau)((?:|.|\n)*)", r"\1"+u'|Catégorie '+ j +r"\2", newtext)
#newtext = re.sub(r"^((?:|.|\n)*\{\{Multi bandeau)(\|Cat.gorie .*){0,}(}}(?:|.|\n)*)$", r"\1\2"+u'|Catégorie '+ j +r"\3", newtext)
#print newtext
print newtext
pause = raw_input()
else:
for i in page.bandeau:
if (re.match(i, desiredStr) is None) and (re.match(i, tempList)):
newtext = re.sub(r"^(\{\{Multi bandeau(?:\|Cat.gorie .*){0,})(}}(?:|.|\n)*)", r"\1"+u'|Catégorie '+ i +r"\2", pagetext)
tempList = tempList + i
print newtext
pause = raw_input()