#!/usr/bin/env python# coding: utf-8# Ce script retire les catégories en double# Importation des modulesimportcatlib,pagegenerators,os,codecs,urllibfromwikipediaimport*# Déclarationlanguage="fr"family="wikiversity"mynick="JackBot"site=getSite(language,family)summary=u'Retrait des catégories en double'# Modification du wikidefmodification(PageHS):page=Page(site,PageHS)ifpage.exists():ifpage.namespace()!=0andpage.title()!=u'Utilisateur:JackBot/test':returnelse:try:PageTemp=page.get()exceptwikipedia.NoPage:print"NoPage"returnexceptwikipedia.IsRedirectPage:print"Redirect page"returnexceptwikipedia.LockedPage:print"Locked/protected page"returnelse:return# Détermination de la catégorie introduite par le modèleifPageTemp.find(u'{{Chapitre')==-1andPageTemp.find(u'{{chapitre')==-1:returnelifPageHS.find(u'/')==-1:returnelse:categorie=u'[[Catégorie:'+PageHS[0:PageHS.find(u'/')]+u']]'ifPageTemp.find(categorie)!=-1:PageTemp=PageTemp[0:PageTemp.find(categorie)]+PageTemp[PageTemp.find(categorie)+len(categorie):len(PageTemp)]ifpage.get()!=PageTemp:# Retouches cosmétiquesifPageTemp.find(u'{{Chapitre')!=-1:PageTemp2=PageTemp[PageTemp.find(u'{{Chapitre')+len(u'{{Chapitre'):len(PageTemp)]whilePageTemp2.find(u'\n\n')!=-1andPageTemp2.find(u'\n\n')<PageTemp2.find(u'}}'):PageTemp=PageTemp[0:PageTemp.find(u'{{Chapitre')+len(u'{{Chapitre')]+PageTemp2[0:PageTemp2.find(u'\n\n')]+PageTemp2[PageTemp2.find(u'\n\n')+1:len(PageTemp2)]PageTemp2=PageTemp[PageTemp.find(u'{{Chapitre')+len(u'{{Chapitre'):len(PageTemp)]whilePageTemp2.find(u'\n\n')!=-1andPageTemp2.find(u'\n\n')<PageTemp2.find(u'}}'):PageTemp=PageTemp[0:PageTemp.find(u'{{Chapitre')+len(u'{{Chapitre')]+PageTemp2[0:PageTemp2.find(u'\n\n')]+PageTemp2[PageTemp2.find(u'\n\n')+2:len(PageTemp2)]whilePageTemp2.find(u'\n\n')!=-1andPageTemp2.find(u'\n\n')<PageTemp2.find(u'}}'):PageTemp=PageTemp[0:PageTemp.find(u'{{Chapitre')+len(u'{{Chapitre')]+PageTemp2[0:PageTemp2.find(u'\n\n')]+PageTemp2[PageTemp2.find(u'\n\n')+3:len(PageTemp2)]PageTemp2=PageTemp[PageTemp.find(u'{{Chapitre')+len(u'{{Chapitre'):len(PageTemp)]elifPageTemp.find(u'{{chapitre')!=-1:PageTemp2=PageTemp[PageTemp.find(u'{{chapitre')+len(u'{{chapitre'):len(PageTemp)]whilePageTemp2.find(u'\n\n')!=-1andPageTemp2.find(u'\n\n')<PageTemp2.find(u'}}'):PageTemp=PageTemp[0:PageTemp.find(u'{{chapitre')+len(u'{{chapitre')]+PageTemp2[0:PageTemp2.find(u'\n\n')]+PageTemp2[PageTemp2.find(u'\n\n')+1:len(PageTemp2)]PageTemp2=PageTemp[PageTemp.find(u'{{chapitre')+len(u'{{chapitre'):len(PageTemp)]whilePageTemp2.find(u'\n\n')!=-1andPageTemp2.find(u'\n\n')<PageTemp2.find(u'}}'):PageTemp=PageTemp[0:PageTemp.find(u'{{chapitre')+len(u'{{chapitre')]+PageTemp2[0:PageTemp2.find(u'\n\n')]+PageTemp2[PageTemp2.find(u'\n\n')+2:len(PageTemp2)]whilePageTemp2.find(u'\n\n')!=-1andPageTemp2.find(u'\n\n')<PageTemp2.find(u'}}'):PageTemp=PageTemp[0:PageTemp.find(u'{{chapitre')+len(u'{{chapitre')]+PageTemp2[0:PageTemp2.find(u'\n\n')]+PageTemp2[PageTemp2.find(u'\n\n')+3:len(PageTemp2)]PageTemp2=PageTemp[PageTemp.find(u'{{chapitre')+len(u'{{chapitre'):len(PageTemp)]# Sauvegarde semie-automatique#result=u'ok'#print (PageTemp.encode(config.console_encoding, 'replace'))#result = raw_input('\033[94m' + "Sauvegarder ? (o/n)" + '\033[0m')#if result == u'n' or result == u'no' or result == u'non': # return#else:try:page.put(PageTemp,summary)exceptpywikibot.EditConflict:print"Conflict"returnexceptwikipedia.NoPage:print"NoPage"returnexceptwikipedia.IsRedirectPage:print"Redirect page"returnexceptwikipedia.LockedPage:print"Locked/protected page"return# Permet à tout le monde de stopper le bot en lui écrivantdefarretdurgence():arrettitle=''.join(u"Discussion utilisateur:JackBot")arretpage=pywikibot.Page(pywikibot.getSite(),arrettitle)gen=iter([arretpage])arret=arretpage.get()ifarret!=u"{{/Stop}}":pywikibot.output(u"\n*** \03{lightyellow}Arrêt d'urgence demandé\03{default} ***")exit(0)# Lecture du fichier articles_list.txt (au même format que pour replace.py)defcrawlerFile(source):ifsource:PagesHS=open(source,'r')while1:PageHS=PagesHS.readline()fin=PageHS.find("\t")PageHS=PageHS[0:fin]ifPageHS=='':breakmodification(PageHS)PagesHS.close()# Traitement d'une catégoriedefcrawlerCat(category):cat=catlib.Category(site,category)pages=cat.articlesList(False)forPageinpagegenerators.PreloadingGenerator(pages,100):modification(Page.title())#crawlerLink(Page.title())subcat=cat.subcategories(recurse=True)forsubcategoryinsubcat:pages=subcategory.articlesList(False)forPageinpagegenerators.PreloadingGenerator(pages,100):modification(Page.title())# Traitement des pages liéesdefcrawlerLink(pagename):#pagename = unicode(arg[len('-links:'):], 'utf-8')page=wikipedia.Page(site,pagename)gen=pagegenerators.ReferringPageGenerator(page)#gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)forPageinpagegenerators.PreloadingGenerator(gen,100):modification(Page.title())# Traitement d'une recherchedefcrawlerSearch(pagename):gen=pagegenerators.SearchPageGenerator(pagename,namespaces="0")forPageinpagegenerators.PreloadingGenerator(gen,100):modification(Page.title())# Traitement des modifications récentesdefcrawlerRC():gen=pagegenerators.RecentchangesPageGenerator()forPageinpagegenerators.PreloadingGenerator(gen,100):modification(Page.title())# Traitement des modifications d'un comptedefcrawlerUser(username):gen=pagegenerators.UserContributionsGenerator(username)forPageinpagegenerators.PreloadingGenerator(gen,100):modification(Page.title())# LancementTraitementLiens=crawlerLink(u'Modèle:Chapitre')'''TraitementWord = modification(u'Utilisateur:JackBot/test')TraitementCategory = crawlerCat(u'chinois')TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot')TraitementFile = crawlerFile('articles_list.txt')TraitementRecherche = crawlerSearch(u'chinois')while 1: TraitementRC = crawlerRC()'''