Commit f41858c6 authored by Linedwell's avatar Linedwell

initial commit

parent d477902f
#!/usr/bin/python
# -*- coding: utf-8 -*-
# author : [[fr:User:Linedwell]]
import sys
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent
import time
import pywikibot
#Variables globales
site = pywikibot.getSite()
#Met à jour la page de journalisation du bot
def editLog(log,page='Utilisateur:LinedBot/Log'):
if log != '':
year = time.strftime('%Y')
month = [u'Janvier',u'Février',u'Mars',u'Avril',u'Mai',u'Juin',u'Juillet',u'Août',u'Septembre',u'Octobre',u'Novembre',u'Décembre']
pageLog = pywikibot.Page(site,page)
pageArchive = pywikibot.Page(site,pageLog.title() + '/' + str(int(year) - 1))
if not pageArchive.exists():
pageLogTemp = archive(site,pageLog,pageArchive)
else:
pageLogTemp = pageLog.get()
if pageLogTemp.find(u'== ' + month[int(time.strftime('%m')) - 1] + ' ==') == -1: pageLogTemp += u'\n\n== ' + month[int(time.strftime('%m')) - 1] + ' =='
if pageLogTemp.find(u'== ' + time.strftime('%Y-%m-%d') + ' ==') != -1: pageLogTemp += '\n' + log
else : pageLogTemp += '\n' + u'=== ' + time.strftime('%Y-%m-%d') + ' ===\n' + log
summary = u"[[WP:Bot|Robot]] : " + u"Mise à jour du journal (OK:" + str(nbrModif) + ", KO:" + str(nbrTotal - nbrModif) +")"
pageLog.put(pageLogTemp,summary)
#Archive la page de journalisation du bot et réinitialise la page pour la nouvelle année
def archive(pageLog,pageArchive):
pageLog.move(pageArchive.title(),u'Archivage annuel') #Déplacement de pageLog vers pageArchive
pageArchive = pywikibot.Page(site,pageArchive.title())
#Retrait du modèle de mise à jour de pageArchive
pageArchiveTemp = pageArchive.get(get_redirect=True)
pageArchiveTemp = pageArchiveTemp.replace(u'{{Mise à jour bot|Linedwell}}\n','',1)
summary = u"[[WP:Bot|Robot]] : Retrait de {{Mise à jour bot}}, page d'archive n'étant plus mise à jour"
pageArchive.put(pageArchiveTemp,summary,force=True)
pageLogTemp = u'__NOINDEX__\n{{Mise à jour bot|Linedwell}}\n{{Sommaire|niveau=1}}\n' #On réinsère le modèle de màj sur pageLog
return pageLogTemp
def setValues(nbTotal, nbModif):
global nbrTotal, nbrModif
nbrTotal = nbTotal
nbrModif = nbModif
\ No newline at end of file
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Script de maintenance pour vikidia
# Auteur: Linedwell
# Licence: <à définir>
import sys
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent
import re, time
import pywikibot
from pywikibot import pagegenerators
import callback
import viki_log
# Déclarations
site = pywikibot.getSite('fr','vikidia')
nbrModif = 0
nbrTotal = 0
# Traitement des nouvelles pages
def newPages(all=False):
global nbrModif, nbrTotal
log = u''
editBool = False
homonCat = pywikibot.Category(site,u'Homonymie')
ebaucheCat = pywikibot.Category(site,u'Ébauche')
ebaucheCat = set(ebaucheCat.subcategories(recurse=3))
hiddenCat = pywikibot.Category(site,u'Catégorie cachée')
hiddenCat = set(hiddenCat.subcategories())
deadendPagesList = list(pagegenerators.DeadendPagesPageGenerator(site=site))
lonelyPagesList = list(pagegenerators.LonelyPagesPageGenerator(site=site))
if all:
pagesList = pagegenerators.AllpagesPageGenerator(start="Alezan", namespace=0,includeredirects=False,site=site)
else:
pagesList = pagegenerators.NewpagesPageGenerator(total=50,site=site)
for page in pagesList:
try:
pageTemp = page.get()
except pywikibot.NoPage:
pywikibot.output(u"Page %s does not exist; skipping."
% page.title(asLink=True))
except pywikibot.IsRedirectPage:
pywikibot.output(u"Page %s is a redirect; skipping."
% page.title(asLink=True))
except pywikibot.LockedPage:
pywikibot.output(u"Page %s is locked; skipping."
% page.title(asLink=True))
else:
# On ne s'occupe de la page que si elle n'est pas une homonymie
catTest = page.categories()
if not homonCat in catTest:
jobList = []
# s'il existe des références, on retire le job 'orphelin'
if page in lonelyPagesList:
jobList.append(u'orphelin')
# s'il n'existe aucune catégorie (directe), on ajoute le job 'catégoriser'
cat = page.categories()
realCat = list(set(cat) - set(hiddenCat) - set(ebaucheCat))
nbCat = len(list(realCat))
if nbCat == 0:
jobList.append(u'catégoriser')
# si la page ne pointe vers aucune autre, on l'indique en impasse
try:
linkedPages = page.linkedPages()
nbLink = len(set(linkedPages))
if nbLink == 0:
jobList.append('impasse')
except pywikibot.data.api.APIError:
print u"APIError on " + page.title() + " ; skipping"
pass
pageTemp, oldJobList = removeBanner(pageTemp)
jobList = updateJobList(oldJobList, jobList)
job = u''
#print page.title() + ' : ' + str(jobList)
# Différence symétrique entre les deux listes, on regarde si des éléments ne sont pas contenus dans les deux listes : (A-B)+(B-A)
diff = list(set(oldJobList).symmetric_difference(set(jobList)))
if diff != []:
nbrTotal += 1
if len(jobList) > 0:
job = ','.join(jobList)
banner = u'{{Maintenance|job=' + job + '|date=~~~~~}}\n\n'
pageTemp = banner + pageTemp
summary = u'[[VD:Robot|Robot]] : Mise à jour du bandeau de maintenance.'
c = callback.Callback()
page.put(pageTemp,summary,callback=c)
if c.error == None:
nbrModif += 1
log +=u'*' + '{{../ExtLinker|' + page.title() + u'}} : Mise à jour du bandeau {{m|maintenance}} avec les paramètres suivants : ' + job + '\n'
return log
# Retrait du bandeau si besoin
def removeBanner(pageTemp):
parser = re.compile(r'\{\{Maintenance\|job=(?P<jb>.*?)\|.*?\}\}(?P<fin>\r\n|\n|\ )',re.I | re.U | re.DOTALL)
searchResult = parser.search(pageTemp)
oldJobList = []
if searchResult:
jobT = searchResult.group('jb')
jobT = ''.join(jobT.split()) # on retire tous les espaces de la chaine
oldJobList = jobT.split(',') # on convertit la chaine en list
pageTemp = parser.sub('',pageTemp,1)
return pageTemp, oldJobList
# Retourne une jobList mise à jour (catégories appliquées par le bot + utilisateurs)
def updateJobList(oldJobList, newJobList):
botJobList = [u'catégoriser',u'impasse',u'orphelin']
tempJobList = list(oldJobList)
for j in botJobList:
if j in oldJobList:
tempJobList.remove(j)
newJobList = list(set(newJobList+tempJobList))
return newJobList
# Exécution
def main():
log = u''
timeStart = time.time()
log += newPages()
timeEnd = time.time()
viki_log.setValues(nbrTotal,nbrModif)
viki_log.editLog(log)
print str(nbrModif) + u' (of ' + str(nbrTotal) + ') pages were modified in '+ str(round(timeEnd - timeStart,2)) + 's.'
if __name__ == "__main__":
try:
main()
finally:
pywikibot.stopme()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment