„Szerkesztő:DhanakBot/szubcsonk.py” változatai közötti eltérés
Megjelenés
Tartalom törölve Tartalom hozzáadva
elavult argumentum cseréje |
gyorsjavítás a phab:T273573-ra; sorszámozás bekapcsolása |
||
1. sor: | 1. sor: | ||
<source lang="python"> |
<source lang="python"> |
||
#!/usr/bin/python |
#!/usr/bin/python |
||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||
175. sor: | 175. sor: | ||
return cmp(str2date(date1), str2date(date2)) |
return cmp(str2date(date1), str2date(date2)) |
||
def monthIdx(month): |
|||
"""Hotfix for [[phab:T273573]]""" |
|||
⚫ | |||
months = ['január', 'február', 'március', 'április', |
|||
'május', 'június', 'július', 'augusztus', |
|||
'szeptember', 'október', 'november', 'december'] |
|||
return months.index(month) + 1 |
|||
⚫ | |||
def str2date(date): |
def str2date(date): |
||
datere = re.compile("([0-9]{4}). (" + monthptrn + ") ([0-9]{1,2}).") |
datere = re.compile("([0-9]{4}). (" + monthptrn + ") ([0-9]{1,2}).") |
A lap 2021. február 2., 04:37-kori változata
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
-ro csak olvasás mód teszteléshez, nem módosít a lapokon
A pywikipedia 2012. január 8-i vagy újabb változatát igényli!
Ez a bot a magyar wikipédia szubcsonk lapjainak adminisztrációját
segíti. Végigmegy a {{szubcsonk}} sablonnal megjelölt szócikkeken,
csoportosítja őket aszerint, hogy a jelzést mikor helyezték el, az
eredményként kapott listát pedig kiteszi a [[Wikipédia:Szubcsonk]] lap
\"Aktuális szubcsonkok\" szakaszába. Módosítja a Szubcsonkok és a
Tennivalók-lista/szubcsonkok sablont.
Eredeti: Dhanak, 2006-2007
Bináris módosításaival, 2010. 08. 29.:
- import wikipedia as pywikibot (a jövőbeni kompatibilitásért);
- a substubs szótár már nem cikkcímeket, hanem a page objektumokat tárolja
(így újra felhasználhatóak a hossz ellenőrzésekor, a page változó jelentése egységes);
- a jelentősen megrövidült cikkek figyelmeztető jelzést kapnak
(új függvény: shortenedMark(page))
Bináris, 2010. 10. 17.:
A wikipedia.py kiegészítésével a lapméretek a fullVersionHistory() helyett
a getVersionHistory() függvénnyel is lekérdezhetőek, így gyorsabban kell futnia.
A kiegészítésben Tgr segített.
Dani, 2012. 01. 23.:
* page.aslink cseréje page.title(asLink=True)-ra a pywiki változtatásai miatt
ato, 2015. 06. 07.:
Migrálva a pywikibot core-ra,
a shortenedMark(page) függvény kiszedve, mert a core alatt nem működött.
"""
from pywikibot import re, datetime
import pywikibot
from pywikibot import date, pagegenerators
site = pywikibot.Site()
monthptrn = "(?:" + '|'.join(date.makeMonthNamedList(site.lang, '%s')) + ")"
dateptrn = r"[0-9]{4}\. *" + monthptrn + r" *[0-9]{1,2}\."
class SzubcsonkBot:
def __init__(self, gen, readOnly = False):
self.gen = gen
self.readOnly = readOnly
self.substubs = {}
self.substubRe = re.compile(r"\{\{szubcsonk\|(?:\[\[[^]]+\]\] )?(" +
dateptrn + ").*?\}\}", re.IGNORECASE)
self.fixSubstubRe = re.compile(r"(?<=\{\{szubcsonk)(?=\}\})", re.IGNORECASE)
def run(self):
self.collectStubs()
if len(self.substubs):
self.listStubs()
self.chgTemplate()
def collectStubs(self):
for page in self.gen:
try:
self.substubs.setdefault(self.getTimestamp(page), []).append(page)
except pywikibot.NoPage:
pywikibot.output(u"HIBA: Nem találom a %s lapot" % page.title())
continue
except pywikibot.IsRedirectPage:
continue
def getTimestamp(self, page):
unknown = "Ismeretlen";
text = page.get()
match = self.substubRe.search(text)
if match:
return match.group(1)
if self.readOnly:
return unknown
(newText, count) = self.fixSubstubRe.subn("|~~~~~", text, count = 1)
if count == 0:
pywikibot.output((u"HIBA: A %s lapon nem találtam " +
u"megfelelő szubcsonk jelzést") % page.title())
return unknown
page.put(newText, u"Robot: szubcsonkjelzés-időbélyeg pótlása")
text = page.get(force = True)
match = self.substubRe.search(text)
if match:
return match.group(1)
else:
pywikibot.output(u"HIBA: Az időbélyeget nem sikerült pótolnom")
return unknown
def shortenedMark(self, page):
#Ha a szubcsonk volt már a jelenlegi méretének kétszerese vagy +1000 byte,
#akkor visszaad egy figyelmeztető jelet, amit a cím mellé lehet tenni.
#Különben üres stringet ad.
#Ideiglenesen kivéve. - ato 2015.06.12 - "Page.getVersionHistory() returns a pywikibot.Timestamp object instead of a MediaWiki one"
#versions=page.getVersionHistory(getAll=True) #Mondjuk érdekes, ha 500-nál több
#curLength=versions[0][4]
#sizes=[]
#for version in versions:
# sizes.append(version[4])
#maxLength=max(sizes)
#if maxLength>=2*curLength or maxLength>curLength+1000:
# return u'[[File:Ambox warning orange.svg|16px|A cikk jelentősen megrövidült!]]'
#else:
# return ''
return ''
def listStubs(self):
listText = u"\n"
dates = sorted(self.substubs)
for date in dates:
listText += "=== %s ===\n" % date
for page in self.substubs[date]:
listText += "* %s%s\n" % (page.title(as_link=True),self.shortenedMark(page))
pywikibot.output(listText)
if not self.readOnly:
listPage = pywikibot.Page(site, u"Wikipédia:Szubcsonk")
oldText = listPage.get()
listRe = re.compile("(?<=" + re.escape(u"<!-- szubcsonk lista eleje -->") +
").*?(?=" + re.escape(u"<!-- szubcsonk lista vége -->") + ")",
flags = re.DOTALL)
newText = listRe.sub(listText, oldText)
if newText != oldText:
listPage.put(newText, u"Robot: szubcsonklista frissítése")
def chgTemplate(self):
if self.readOnly:
return
for pageName in iter([u"Sablon:Szubcsonkok", u"Sablon:Tennivalók-lista/szubcsonkok"]):
tmpl = pywikibot.Page(site, pageName)
oldText = tmpl.get()
groupRe = re.compile("(?<=" + re.escape("<!-- kezdet:") + "([<=>][0-9])" + re.escape(" -->") +
").*?(?=" + re.escape(u"<!-- vég:") + "\\1" + re.escape(" -->") + ")",
flags = re.DOTALL)
newText = groupRe.sub(self.listStubsOfGivenAge, oldText)
if newText != oldText:
pywikibot.showDiff(oldText, newText)
tmpl.put(newText, u"Robot: szubcsonklista frissítése")
def listStubsOfGivenAge(self, match):
op = match.group(1)[0]
if op == "=":
op = "=="
delta = datetime.timedelta(int(match.group(1)[1]))
today = datetime.date.today()
dates = sorted(self.substubs)
liststr = ""
for date in dates:
if not eval("today - str2date(date) %s delta" % op):
continue
for page in self.substubs[date]:
if liststr != "":
liststr += ", "
liststr += page.title(as_link=True)+self.shortenedMark(page);
if liststr == "":
liststr = "''nincs ilyen szubcsonk''"
return liststr
def datesort(date1, date2):
return cmp(str2date(date1), str2date(date2))
def monthIdx(month):
"""Hotfix for [[phab:T273573]]"""
months = ['január', 'február', 'március', 'április',
'május', 'június', 'július', 'augusztus',
'szeptember', 'október', 'november', 'december']
return months.index(month) + 1
# monthIdx = date.formats['MonthName'][site.lang]
def str2date(date):
datere = re.compile("([0-9]{4}). (" + monthptrn + ") ([0-9]{1,2}).")
m = datere.match(date)
if m:
return datetime.date(int(m.group(1)), monthIdx(m.group(2)), int(m.group(3)))
else:
return datetime.date.today()
def main():
readOnly = False
for arg in pywikibot.handle_args():
if arg == '-ro':
readOnly = True
else:
pywikibot.output(u"Nem várt argumentum: " + arg)
sys.exit(1)
tmpl = pywikibot.Page(site, u"Sablon:Szubcsonk")
gen = pagegenerators.PreloadingGenerator(
tmpl.getReferences(only_template_inclusion=True))
SzubcsonkBot(gen, readOnly = readOnly).run()
if __name__ == "__main__":
try:
main()
finally:
pywikibot.stopme()