Szerkesztő:BinBot/frissdump.py

A Wikipédiából, a szabad enciklopédiából

Ez a script {{A dump dátuma}}(?) sablont frissíti, és naponta többször fut a toolserverről. Ha leáll, ellenőrizni kell, nem történt-e változás a https://dumps.wikimedia.org/huwiki/latest/ lap szerkezetében, vagy nem írta-e át valaki kézzel hibásan a sablont.

#coding: utf-8

import re
import pywikibot
import sys
if not sys.version_info[0] == 2:
    import urllib
    from urllib.request import urlopen
else:
    from urllib import urlopen
from sys import exit
from binbotutils import levelez #Másnak nem szükséges

#A dumpokat listázó oldal betöltése
try:
    lista = urlopen('https://dumps.wikimedia.org/huwiki/latest/')
except:
    pywikibot.output(u"\03{lightgreen}A letöltés sikertelen volt.\03{default}")
    #A raise után írva mindenképp ronda, de u-val ki se írja.
    levelez(fatal=True,othertext = 
        u'A https://dumps.wikimedia.org/huwiki/latest/ letöltése sikertelen.')
    exit()

#A dumpnév és a dátum keresése
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 
            'Oct', 'Nov', 'Dec']
magyarul = [
    u'január', u'február', u'március', u'április', u'május', u'június',
    u'július', u'augusztus', u'szeptember', u'október', u'november', u'december',
    ]
nincsmeg = True
minta = re.compile(r'(\d\d)\-(%s)\-(\d{4}) \d\d\:\d\d' % '|'.join(months))
minta2 = re.compile(r'(20\d\d)\. (%s) (\d{1,2})\.' % '|'.join(magyarul))
sorok = [line.decode() for line in lista]
for sor in sorok:
    if 'huwiki-latest-pages-articles.xml.bz2"' in sor:
        d = minta.search(sor)
        if d:
            nap = d.group(1)
            nap = nap[1] if nap.startswith('0') else nap
            honap = magyarul[months.index(d.group(2))]
            friss = u'%s. %s %s.' % (d.group(3), honap, nap)
            nincsmeg = False
if nincsmeg:
    pywikibot.output(u'A legfrissebb dump dátuma nincs meg!')
    levelez(othertext = u'Nem találom a dump dátumát. Új formátum?')
    exit()
pywikibot.output(u'A legfrissebb dump dátuma: ' + friss)

#A sablon frissítése
site = pywikibot.Site()
sablon = pywikibot.Page(site,u'Sablon:A dump dátuma')
try:
    text = sablon.get()
    if minta2.search(text):
        text2 = minta2.sub(friss,text)
        if text2 != text:
            comment = u'A bot új dumpot talált, a dátuma: ' + friss
            try:
                sablon.put(text2, comment, minor = False, botflag=False)
                pywikibot.output(u'A frissítés sikeres volt.')
                levelez(othertext = comment)
            except:
                pywikibot.output(u'A frissítés sikertelen volt.')
                levelez(fatal = True, hiba = True, othertext = comment)
        else:
            s = u'A dump nem frissült, a dátuma továbbra is ' + friss
            pywikibot.output(s)
            levelez(othertext = s)
    else:
        s = u'A sablonban nincs meg a régi dátum. Valaki megváltoztatta?'
        pywikibot.output(s)
        levelez(fatal=True,othertext=s)
except:
    s = u'A sablon betöltése nem sikerült.'
    pywikibot.output(s)
    levelez(fatal=True,othertext=s)