Utilisateur:NaggoBot/sport.py

# -*- coding: utf-8 -*-
import pywikibot
import datetime
import time
is_dst = time.daylight and time.localtime().tm_isdst > 0
#utc_offset = - (time.altzone if is_dst else time.timezone)
# pour simplfier on admettra que le bot reste sur UTC en permanence
utc_offset = 7200
from pywikibot import date
delai=7
limit_commentaire=6
site = pywikibot.Site('fr')
commentaire='''Sport : suivi des articles récents'''
cible='Projet:Sport/Articles récents'
pagecible=pywikibot.Page(site,cible)
listes=[]
for article in pagecible.linkedPages():
    listes.append(article.title())
categpalette=pywikibot.Page(site,"Catégorie:Modèle lien vers portail sport")
portaux=[]
for p in site.categorymembers(categpalette):
    for l in p.linkedPages():
        if l.title().startswith("Portail:"):
            portaux.append(l.title())
articles={}
deb=datetime.datetime.now()-datetime.timedelta(days=delai)
debut=datetime.datetime(deb.year, deb.month, deb.day)
categ=pywikibot.Page(site,"Catégorie:Portail:Sport/Articles liés")
cpt=0
debut_utc=debut-datetime.timedelta(seconds=utc_offset)
for page in site.categorymembers(categ, sortby="timestamp", starttime=debut_utc.isoformat()):
    firstrev= next(page.revisions(reverse=True, total=1))
    daterev=firstrev['timestamp']
    datepage=daterev+datetime.timedelta(seconds=utc_offset)
    if datepage<debut:
        continue
    dateJMA="%4d-%02d-%02d" % (datepage.year, datepage.month, datepage.day)
    for r in page.linkedPages():
        if r.isRedirectPage():
            r=r.getRedirectTarget()
        if r.title() in portaux:
            if dateJMA in articles:
                if r.title() in articles[dateJMA]:
                    if not page.title() in articles[dateJMA][r.title()]:
                        articles[dateJMA][r.title()].append(page.title())
                else:
                    articles[dateJMA][r.title()]=[page.title()]
            else: 
                articles[dateJMA]={r.title():[page.title()]}
    if page.title() not in listes and cpt < limit_commentaire:
        commentaire+=" + [[%s]]" % page.title()
        cpt+=1
        if cpt == limit_commentaire:
            commentaire+=" et al."
texte="__NOTOC__\n"
sous_portails={"Tennis":'Portail:Tennis/Articles récents',
		"Baseball":"Utilisateur:NaggoBot/TestBaseball",
		"Basket-ball":"Projet:Basket-ball/Articles récents",
		"Football américain":"Projet:Football américain/Articles récents",
		"Athlétisme":"Projet:Athlétisme/Tableau suivi/Articles récents"}
texte_sousportail={}
cible_sousportail={}
pagecible_sousportail={}

for sousportail,cible in sous_portails.items():
    texte_sousportail[sousportail]="__NOTOC__\n{{bots|deny=HAL}}\n"
    cible_sousportail[sousportail]=cible
    pagecible_sousportail[sousportail]=pywikibot.Page(site,cible_sousportail[sousportail])

for k in sorted(articles, reverse=True):
    texte+= "== %d %s ==\n" % (int(k.split("-")[2]), date.formats['MonthName']['fr'](int(k.split("-")[1])))
    for i in sorted(articles[k]):
        texte+= "* '''%s''' : "% str(i).split(':')[1]
        for j in sorted(articles[k][i]):
            texte+= " [[%s]] ;" % j
        for sousportail, cible in sous_portails.items():
            if str(i).split(':')[1] == sousportail:
                texte_sousportail[sousportail]+= "* %d %s :" % (int(k.split("-")[2]), date.formats['MonthName']['fr'](int(k.split("-")[1])))
                for j in sorted(articles[k][i]):
                    texte_sousportail[sousportail]+= " [[%s]] ;" % j
                texte_sousportail[sousportail]+= "\n"
        texte+="\n"
texte+="----\n*'''Les précédents articles sont placés dans la page''' '''[[Projet:Sport/Archives|archives]].'''"
pagecible.put(texte, commentaire)
for sousportail, cible in sous_portails.items():
    pagecible_sousportail[sousportail].put(texte_sousportail[sousportail], "Bot : Articles récents du portail %s" % sousportail.lower())