#!/usr/bin/env python
# coding: utf-8
# Ce script ajoute les ingrédients dans leurs catégories
# Importation des modules
import catlib, pagegenerators, os, codecs, urllib
from wikipedia import *
# Déclaration
mynick = "JackBot"
language = "fr"
family = "wikibooks"
site = getSite(language,family)
summary = u'[[Discussion:Recettes de cuisine|Ajout des catégories des ingrédients sans hyperlien]]'
# Modification du wiki
def modification(PageHS):
page = Page(site,PageHS)
if page.namespace() != 0: return
try:
PageTemp = page.get()
except wikipedia.NoPage:
print "NoPage"
return
except wikipedia.IsRedirectPage:
print "Redirect page"
return
while PageTemp.find(u'oeuf') != -1:
PageTemp = PageTemp[0:PageTemp.find(u'oeuf')] + u'œuf' + PageTemp[PageTemp.find(u'oeuf')+len(u'oeuf'):len(PageTemp)]
PagesIngr = open(u'articles_listed.txt', 'r')
while 1:
PageIngr = PagesIngr.readline()
fin = PageIngr.find("\t")
PageIngr = PageIngr[0:fin]
if PageIngr == '': break
if PageTemp.find(PageIngr) != -1:
if PageTemp.find(u'[[' + PageIngr) != -1:
PageTemp2 = PageTemp[PageTemp.find(u'[[' + PageIngr):len(PageTemp)]
PageTemp = PageTemp[0:PageTemp.find(u'[[' + PageIngr)] + u'{{i|' + PageTemp[PageTemp.find(u'[[' + PageIngr)+2:PageTemp.find(u'[[' + PageIngr)+PageTemp2.find(u']]')] + u'}}' + PageTemp[PageTemp.find(u'[[' + PageIngr)+PageTemp2.find(u']]')+2:len(PageTemp)]
elif PageTemp.find(u'[[w:' + PageIngr) != -1:
PageTemp2 = PageTemp[PageTemp.find(u'[[w:' + PageIngr):len(PageTemp)]
PageTemp = PageTemp[0:PageTemp.find(u'[[w:' + PageIngr)] + u'{{i|' + PageTemp[PageTemp.find(u'[[w:' + PageIngr)+4:PageTemp.find(u'[[w:' + PageIngr)+PageTemp2.find(u']]')] + u'}}' + PageTemp[PageTemp.find(u'[[w:' + PageIngr)+PageTemp2.find(u']]')+2:len(PageTemp)]
elif PageTemp.find(u'[[wikt:' + PageIngr) != -1:
PageTemp2 = PageTemp[PageTemp.find(u'[[wikt:' + PageIngr):len(PageTemp)]
PageTemp = PageTemp[0:PageTemp.find(u'[[wikt:' + PageIngr)] + u'{{i|' + PageTemp[PageTemp.find(u'[[wikt:' + PageIngr)+7:PageTemp.find(u'[[wikt:' + PageIngr)+PageTemp2.find(u']]')] + u'}}' + PageTemp[PageTemp.find(u'[[wikt:' + PageIngr)+PageTemp2.find(u']]')+2:len(PageTemp)]
elif PageTemp.find(u' ' + PageIngr + u'\n') != -1:
PageTemp = PageTemp[0:PageTemp.find(u' ' + PageIngr + u'\n')+1] + u'{{i|' + PageIngr + u'}}' + PageTemp[PageTemp.find(u' ' + PageIngr + u'\n')+len(u' ' + PageIngr + u'\n')-1:len(PageTemp)]
elif PageTemp.find(u' ' + PageIngr + u' ') != -1:
PageTemp = PageTemp[0:PageTemp.find(u' ' + PageIngr + u' ')+1] + u'{{i|' + PageIngr + u'}}' + PageTemp[PageTemp.find(u' ' + PageIngr + u' ')+len(u' ' + PageIngr + u' ')-1:len(PageTemp)]
elif PageTemp.find(PageIngr + u's') != -1:
if PageTemp.find(u' ' + PageIngr + u's\n') != -1:
PageTemp = PageTemp[0:PageTemp.find(u' ' + PageIngr + u's\n')+1] + u'{{i|' + PageIngr + u'}}s' + PageTemp[PageTemp.find(u' ' + PageIngr + u's\n')+len(u' ' + PageIngr + u's\n')-1:len(PageTemp)]
elif PageTemp.find(u' ' + PageIngr + u's ') != -1:
PageTemp = PageTemp[0:PageTemp.find(u' ' + PageIngr + u's ')+1] + u'{{i|' + PageIngr + u'}}s' + PageTemp[PageTemp.find(u' ' + PageIngr + u's ')+len(u' ' + PageIngr + u's ')-1:len(PageTemp)]
PagesIngr.close()
PageEnd = PageTemp
while PageEnd.find(u'[[../Ingrédients/') != -1:
PageTemp = PageEnd[PageEnd.find(u'[[../Ingrédients/'):len(PageEnd)]
PageEnd = PageEnd[0:PageEnd.find(u'[[../Ingrédients/')] + u'{{i|' + PageEnd[PageEnd.find(u'[[../Ingrédients/')+PageTemp.find(u'|')+1:PageEnd.find(u'[[../Ingrédients/')+PageTemp.find(u']')] + u'}}' + PageEnd[PageEnd.find(u'[[../Ingrédients/')+PageTemp.find(u']')+2:len(PageEnd)]
while PageEnd.find(u'[[Livre_de_cuisine/Ingrédients/') != -1:
PageTemp = PageEnd[PageEnd.find(u'[[Livre_de_cuisine/Ingrédients/'):len(PageEnd)]
PageEnd = PageEnd[0:PageEnd.find(u'[[Livre_de_cuisine/Ingrédients/')] + u'{{i|' + PageEnd[PageEnd.find(u'[[Livre_de_cuisine/Ingrédients/')+PageTemp.find(u'|')+1:PageEnd.find(u'[[Livre_de_cuisine/Ingrédients/')+PageTemp.find(u']')] + u'}}' + PageEnd[PageEnd.find(u'[[Livre_de_cuisine/Ingrédients/')+PageTemp.find(u']')+2:len(PageEnd)]
while PageEnd.find(u'[[Livre de cuisine/Ingrédients/') != -1:
PageTemp = PageEnd[PageEnd.find(u'[[Livre de cuisine/Ingrédients/'):len(PageEnd)]
PageEnd = PageEnd[0:PageEnd.find(u'[[Livre de cuisine/Ingrédients/')] + u'{{i|' + PageEnd[PageEnd.find(u'[[Livre de cuisine/Ingrédients/')+PageTemp.find(u'|')+1:PageEnd.find(u'[[Livre de cuisine/Ingrédients/')+PageTemp.find(u']')] + u'}}' + PageEnd[PageEnd.find(u'[[Livre de cuisine/Ingrédients/')+PageTemp.find(u']')+2:len(PageEnd)]
# Majuscules, parenthèses, et doublons
if PageEnd.find(u'{{i|') == -1: return
PageTemp = PageEnd[PageEnd.find(u'{{i|'):len(PageEnd)]
PageEnd = PageEnd[0:PageEnd.find(u'{{i|')]
while PageTemp.find(u'{{i|') != -1:
PageTemp = PageTemp[4:len(PageTemp)]
if PageTemp.find(u'|') < PageTemp.find(u'}') and PageTemp.find(u'|') != -1:
mot = PageTemp[0:PageTemp.find(u'|')]
if mot.find(u' (') != -1: mot = mot[0:mot.find(u' (')]
PageTemp = mot.lower() + PageTemp[PageTemp.find(u'|'):len(PageTemp)]
else:
mot = PageTemp[0:PageTemp.find(u'}')]
if mot.find(u' (') != -1: mot = mot[0:mot.find(u' (')]
PageTemp = mot.lower() + PageTemp[PageTemp.find(u'}'):len(PageTemp)]
if PageTemp.find(u'|') == -1: break
if PageTemp[0:PageTemp.find(u'|')] == PageTemp[PageTemp.find(u'|')+1:PageTemp.find(u'}}')]:
PageTemp = PageTemp[0:PageTemp.find(u'|')] + PageTemp[PageTemp.find(u'}}'):len(PageTemp)]
if PageTemp.find(u'{{i|') != -1:
PageEnd = PageEnd + u'{{i|' + PageTemp[0:PageTemp.find(u'{{i|')]
PageTemp = PageTemp[PageTemp.find(u'{{i|'):len(PageTemp)]
PageEnd = PageEnd + u'{{i|' + PageTemp
# Elisions
while PageEnd.find(u'{{i|eau}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|eau}}')] + u'eau' + PageEnd[PageEnd.find(u'{{i|eau}}')+len(u'{{i|eau}}'):len(PageEnd)]
while PageEnd.find(u'{{i|huile d’olive') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|huile d’olive')] + u'{{i|huile d\'olive' + PageEnd[PageEnd.find(u'{{i|huile d’olive')+len(u'{{i|huile d’olive'):len(PageEnd)]
while PageEnd.find(u'{{i|sel}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|sel}}')] + u'sel' + PageEnd[PageEnd.find(u'{{i|sel}}')+len(u'{{i|sel}}'):len(PageEnd)]
while PageEnd.find(u'{{i|Sel}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Sel}}')] + u'Sel' + PageEnd[PageEnd.find(u'{{i|Sel}}')+len(u'{{i|Sel}}'):len(PageEnd)]
while PageEnd.find(u'{{i|sel alimentaire|sel}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|sel alimentaire|sel}}')] + u'sel' + PageEnd[PageEnd.find(u'{{i|sel alimentaire|sel}}')+len(u'{{i|sel alimentaire|sel}}'):len(PageEnd)]
while PageEnd.find(u'{{i|Sel alimentaire|Sel}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Sel alimentaire|Sel}}')] + u'Sel' + PageEnd[PageEnd.find(u'{{i|Sel alimentaire|Sel}}')+len(u'{{i|Sel alimentaire|Sel}}'):len(PageEnd)]
while PageEnd.find(u'{{i|Sel alimentaire|salé}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Sel alimentaire|salé}}')] + u'salé' + PageEnd[PageEnd.find(u'{{i|Sel alimentaire|salé}}')+len(u'{{i|Sel alimentaire|salé}}'):len(PageEnd)]
while PageEnd.find(u'{{i|Sel alimentaire|salée}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Sel alimentaire|salée}}')] + u'salée' + PageEnd[PageEnd.find(u'{{i|Sel alimentaire|salée}}')+len(u'{{i|Sel alimentaire|salée}}'):len(PageEnd)]
while PageEnd.find(u'{{i|Œuf (cuisine)') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Œuf (cuisine)')+4] + u'œuf' + PageEnd[PageEnd.find(u'{{i|Œuf (cuisine)')+len(u'{{i|Œuf (cuisine)'):len(PageEnd)]
while PageEnd.find(u'{{i|huile}} d\'{{i|olive}}') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|huile}} d\'{{i|olive}}')+4] + u'huile d\'olive' + PageEnd[PageEnd.find(u'{{i|huile}} d\'{{i|olive}}')+len(u'{{i|huile}} d\'{{i|olive}}')-2:len(PageEnd)]
while PageEnd.find(u'{{i|hu') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|hu')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|hu')+4:len(PageEnd)]
while PageEnd.find(u'{{i|a') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|a')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|a')+4:len(PageEnd)]
while PageEnd.find(u'{{i|A') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|A')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|A')+4:len(PageEnd)]
while PageEnd.find(u'{{i|e') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|e')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|e')+4:len(PageEnd)]
while PageEnd.find(u'{{i|E') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|E')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|E')+4:len(PageEnd)]
while PageEnd.find(u'{{i|i') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|i')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|i')+4:len(PageEnd)]
while PageEnd.find(u'{{i|I') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|I')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|I')+4:len(PageEnd)]
while PageEnd.find(u'{{i|o') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|o')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|o')+4:len(PageEnd)]
while PageEnd.find(u'{{i|O') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|O')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|O')+4:len(PageEnd)]
while PageEnd.find(u'{{i|u') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|u')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|u')+4:len(PageEnd)]
while PageEnd.find(u'{{i|U') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|U')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|U')+4:len(PageEnd)]
while PageEnd.find(u'{{i|y') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|y')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|y')+4:len(PageEnd)]
while PageEnd.find(u'{{i|Y') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Y')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|Y')+4:len(PageEnd)]
while PageEnd.find(u'{{i|œ') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|œ')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|œ')+4:len(PageEnd)]
while PageEnd.find(u'{{i|Œ') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Œ')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|Œ')+4:len(PageEnd)]
while PageEnd.find(u'{{i|à') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|à')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|à')+4:len(PageEnd)]
while PageEnd.find(u'{{i|À') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|À')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|À')+4:len(PageEnd)]
while PageEnd.find(u'{{i|â') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|â')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|â')+4:len(PageEnd)]
while PageEnd.find(u'{{i|Â') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Â')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|Â')+4:len(PageEnd)]
while PageEnd.find(u'{{i|é') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|é')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|é')+4:len(PageEnd)]
while PageEnd.find(u'{{i|É') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|É')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|É')+4:len(PageEnd)]
while PageEnd.find(u'{{i|è') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|è')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|è')+4:len(PageEnd)]
while PageEnd.find(u'{{i|È') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|È')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|È')+4:len(PageEnd)]
while PageEnd.find(u'{{i|ê') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|ê')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|ê')+4:len(PageEnd)]
while PageEnd.find(u'{{i|Ê') != -1:
PageEnd = PageEnd[0:PageEnd.find(u'{{i|Ê')+4] + u'\'=oui|' + PageEnd[PageEnd.find(u'{{i|Ê')+4:len(PageEnd)]
# Conclusion
if PageEnd != page.get():
print (PageEnd.encode(config.console_encoding, 'replace'))
if raw_input("Sauver (o/n)") == u'n' or raw_input("Sauver (o/n)") == u'no' or raw_input("Sauver (o/n)") == u'non': return
try:
page.put(PageEnd, summary)
except pywikibot.EditConflict:
print "Conflict"
return
except wikipedia.NoPage:
print "NoPage"
return
except wikipedia.IsRedirectPage:
print "Redirect page"
return
except wikipedia.LockedPage:
print "Locked/protected page"
return
# Traitement d'un fichier
def crawlerFile(source):
if source:
PagesHS = open(source, 'r')
while 1:
PageHS = PagesHS.readline()
fin = PageHS.find("\t")
PageHS = PageHS[0:fin]
if PageHS == '': break
print (PageHS)
modification(PageHS)
PagesHS.close()
# Traitement d'une catégorie
def crawlerCat(category):
cat = catlib.Category(site, category)
pages = cat.articlesList(False)
for Page in pagegenerators.PreloadingGenerator(pages,100):
modification(Page.title())
subcat = cat.subcategories(recurse = True)
for subcategory in subcat:
pages = subcategory.articlesList(False)
for Page in pagegenerators.PreloadingGenerator(pages,100):
modification(Page.title())
# Traitement des modifications récentes
def crawlerRC():
RC = pagegenerators.RecentchangesPageGenerator()
for Page in pagegenerators.PreloadingGenerator(RC,100):
modification(Page.title())
# Traitement des pages liées
def crawlerLink(pagename):
#pagename = unicode(arg[len('-links:'):], 'utf-8')
page = wikipedia.Page(site, pagename)
gen = pagegenerators.ReferringPageGenerator(page)
#gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
for Page in pagegenerators.PreloadingGenerator(gen,100):
modification(Page.title())
# Lancement
TraitementFile = crawlerFile('articles_list.txt')
#TraitementCategory = crawlerCat(u'Catégorie:Recettes de cuisine')
#TraitementLink = crawlerLink(u'Livre de cuisine/Ingrédients/Lait')
#while 1:
# TraitementRC = crawlerRC()