Utilisateur:JackBot/Bistro.py

#!/usr/bin/env python
# Ce script crée les pages de la salle café.

# Importation des modules
import catlib, pagegenerators, os, codecs, urllib
from wikipedia import *

# Déclaration
language = "fr"
family = "wikiversity"
mynick = "JackBot"
site = getSite(language,family)
summary = u'Création du café de la semaine'
bisextile = 29

# Calcul des dates
def date(j,m,a):
	if j > 31 and m == u'janvier':
		j = j - 31
		m = u'février'
	elif j > bisextile and m == u'février':
		j = j - bisextile
		m = u'mars'
	elif j > 31 and m == u'mars':
		j = j - 31
		m = u'avril'
	elif j > 30 and m == u'avril':
		j = j - 30
		m = u'mai'
	elif j > 31 and m == u'mai':
		j = j - 31
		m = u'juin'
	elif j > 30 and m == u'juin':
		j = j - 30
		m = u'juillet'
	elif j > 31 and m == u'juillet':
		j = j - 31
		m = u'août'
	elif j > 31 and m == u'août':
		j = j - 31
		m = u'septembre'
	elif j > 30 and m == u'septembre':
		j = j - 30
		m = u'octobre'
	elif j > 31 and m == u'octobre':
		j = j - 31
		m = u'novembre'
	elif j > 30 and m == u'novembre':
		j = j - 30
		m = u'décembre'
	elif j > 31 and m == u'décembre':
		j = j - 31
		m = u'janvier'
		a = a + 1
	return str(j) + u' ' + m + u' ' + str(a)

def date2(jj,mm):
	if mm == u'janvier':
		if jj > (31 + bisextile):
			jj = jj - (31 + bisextile)
			mm = u'03'
		elif jj > 31:
			jj = jj - 31
			mm = u'02'
		else:
			mm = u'01'
	elif mm == u'février':
		if jj > (31 + bisextile):
			jj = jj - (31 + bisextile)
			mm = u'04'		
		elif jj > bisextile: 
			jj = jj - bisextile
			mm = u'03'
		else:
			mm = u'02'
	elif mm == u'mars':
		if jj > 61:
			jj = jj - 61
			mm = u'05'		
		elif jj > 31: 
			jj = jj - 31
			mm = u'04'
		else:
			mm = u'03'
	elif mm == u'avril':
		if jj > 61:
			jj = jj - 61
			mm = u'06'		
		elif jj > 30: 
			jj = jj - 30
			mm = u'05'
		else:
			mm = u'04'
	elif mm == u'mai':
		if jj > 61:
			jj = jj - 61
			mm = u'07'		
		elif jj > 31: 
			jj = jj - 31
			mm = u'06'
		else:
			mm = u'05'
	elif mm == u'juin':
		if jj > 61:
			jj = jj - 61
			mm = u'08'	
		elif jj > 30: 
			jj = jj - 30
			mm = u'07'
		else:
			mm = u'06'
	elif mm == u'juillet':
		if jj > 62:
			jj = jj - 62
			mm = u'09'	
		elif jj > 31: 
			jj = jj - 31
			mm = u'08'
		else:
			mm = u'07'
	elif mm == u'août':
		if jj > 61:
			jj = jj - 61
			mm = u'10'
		elif jj > 31: 
			jj = jj - 31
			mm = u'09'
		else:
			mm = u'08'
	elif mm == u'septembre':
		if jj > 61:
			jj = jj - 61
			mm = u'11'
		elif jj > 30: 
			jj = jj - 30
			mm = u'10'
		else:
			mm = u'09'
	elif mm == u'octobre':
		if jj > 61:
			jj = jj - 61
			mm = u'12'	
		elif jj > 31: 
			jj = jj - 31
			mm = u'11'
		else:
			mm = u'10'
	elif mm == u'novembre':
		if jj > 61:
			jj = jj - 61
			mm = u'01'
		elif jj > 30: 
			jj = jj - 30
			mm = u'12'
		else:
			mm = u'11'
	elif mm == u'décembre':
		if jj > 62:
			jj = jj - 62
			mm = u'02'	
		elif jj > 31: 
			jj = jj - 31
			mm = u'01'
		else:
			mm = u'12'
	return str(jj) + u'/' + mm
	
def zero(n):
	if n < 10:
		return u'0' + str(n)
	else:
		return str(n)

# Modification du wiki
def modification():
	j = 2 # 1e lundi de l'année
	m = u'janvier'
	a = 2012
	for s in range(4, 52): # on commence semaine 4 pour coller au sommaire
		PageHS = u'Wikiversité:La salle café/' + zero(s) + u' ' + str(a)
		page = Page(site,PageHS)
		if not page.exists():
			PageEnd = u'= La salle café du ' + date(j+21,m,a) + u' au ' + date(j+27,m,a) + u' =\n<noinclude>\n{| align="right" rules="all" width="100px" cellpadding="0" cellspacing="0" style="margin: 0 0 1em 1em; border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px; font-size:90%; text-align:center; background-color: #FFFFFF;"\n! bgcolor="#bfbfff" | <span style="color:gray">Sous-pages</font>''''
			'''u'|-\n|[[Wikiversité:La salle café/' + zero(s - 3) + u' ' + str(a) + u'|Du ' + date2(j,m) + u' au ' + date2(j+6,m) + u']]''''
			'''u'|-\n|[[Wikiversité:La salle café/' + zero(s - 2) + u' ' + str(a) + u'|Du ' + date2(j+7,m) + u' au ' + date2(j+13,m) + u']]''''
			'''u'|-\n|[[Wikiversité:La salle café/' + zero(s - 1) + u' ' + str(a) + u'|Du ' + date2(j+14,m) + u' au ' + date2(j+20,m) + u']]''''
			'''u'|-\n|bgcolor="#ccccff"| Semaine du ' + date2(j+21,m) + u' au ' + date2(j+27,m) + '''
			'''u'|-\n|[[Wikiversité:La salle café/' + zero(s + 1) + u' ' + str(a) + u'|Du ' + date2(j+28,m) + u' au ' + date2(j+34,m) + u']]''''
			'''u'|-\n|[[Wikiversité:La salle café/' + zero(s + 2) + u' ' + str(a) + u'|Du ' + date2(j+35,m) + u' au ' + date2(j+41,m) + u']]''''
			'''u'|-\n|[[Wikiversité:La salle café/' + zero(s + 3) + u' ' + str(a) + u'|Du ' + date2(j+42,m) + u' au ' + date2(j+48,m) + u']]''''
			'''u'|-\n|<!-- choisissez une image et remplacez ce commentaire par [[Image:Nom_de_l\'image.jpg|150px]] <small>description de l\'image</small> -->''''
			'''u'|}\n[http://fr.wikiversity.org/w/index.php?title=Wikiversité:La_salle_café&action=purge <small>Café rafraîchi</small>][{{SERVER}}{{localurl:Wikiversité:La salle café/{{#time:W Y}}|action=edit&section=new}} <small>Ajouter un message</small>]__TOC__</noinclude>'
			#print (PageEnd.encode(config.console_encoding, 'replace'))
			#raw_input(PageHS.encode(config.console_encoding, 'replace'))
			page.put(PageEnd, summary)
		DateCourante = date(j+7,m,a)
		j = int(DateCourante[0:DateCourante.find(u' ')])
		m = DateCourante[DateCourante.find(u' ')+1:DateCourante.rfind(u' ')]
		a = DateCourante[DateCourante.rfind(u' ')+1:len(DateCourante)]

# Lecture du fichier articles_list.txt (au même format que pour replace.py)
def lecture(source):
    PagesHS = open(source, 'r')
    while 1:
		PageHS = PagesHS.readline()
		fin = PageHS.find("\t")
		PageHS = PageHS[0:fin]
		if PageHS == '': break
		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):
		if Page.namespace() == 0: modification(u'Discussion:' + Page.title())
	subcat = cat.subcategories(recurse = True)
	for subcategory in subcat:
		pages = subcategory.articlesList(False)
		for Page in pagegenerators.PreloadingGenerator(pages,100):
			if Page.namespace() == 0: modification(u'Discussion:' + 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):
		if Page.namespace() == 1: modification(Page.title())
		elif Page.namespace() == 0: modification(u'Discussion:' + Page.title())
		
# Traitement des modifications récentes
def crawlerRC():
	RC = pagegenerators.RecentchangesPageGenerator()
	for Page in pagegenerators.PreloadingGenerator(RC,100):
		if Page.namespace() == 1: modification(Page.title())

# Lancement
Traitment = modification()
'''
#TraitementFile = lecture('articles_list.txt')
#TraitementLiens = crawlerLink(u'')
#TraitementCategory = crawlerCat(u'')
'''