„Szerkesztő:DhanakBot/szubcsonk.py” változatai közötti eltérés
Tartalom törölve Tartalom hozzáadva
framework update + aláírás megengedése a szubcsonkjelölésben |
Nincs szerkesztési összefoglaló |
||
1. sor: | 1. sor: | ||
<source lang="python"> |
|||
<pre> |
|||
#!/usr/bin/python |
#!/usr/bin/python |
||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||
18. sor: | 18. sor: | ||
site = wikipedia.getSite() |
site = wikipedia.getSite() |
||
monthptrn = "(?:" + '|'.join(date.makeMonthNamedList(site.language(), '%s')) + ")" |
monthptrn = "(?:" + '|'.join(date.makeMonthNamedList(site.language(), '%s')) + ")" |
||
dateptrn = r" |
dateptrn = r"\d{4}\. *" + monthptrn + r" *\d\d?\." |
||
27. sor: | 27. sor: | ||
self.substubs = {} |
self.substubs = {} |
||
self.substubRe = re.compile(r"\{\{szubcsonk\|(?:\[\[[^]]+\]\] )?(" |
self.substubRe = re.compile(r"\{\{szubcsonk\|(?:\[\[[^]]+\]\] )?(" \ |
||
dateptrn + ").*?\}\}", re.IGNORECASE) |
dateptrn + ").*?\}\}", re.IGNORECASE) |
||
self.fixSubstubRe = re.compile(r"(?<=\{\{szubcsonk)(?=\}\})", re.IGNORECASE) |
self.fixSubstubRe = re.compile(r"(?<=\{\{szubcsonk)(?=\}\})", re.IGNORECASE) |
||
78. sor: | 78. sor: | ||
listText = u"\n" |
listText = u"\n" |
||
dates = self.substubs.keys() |
dates = self.substubs.keys() |
||
dates.sort( |
dates.sort(key=str2date) |
||
for date in dates: |
for date in dates: |
||
listText += "=== %s ===\n" % date |
listText += "=== %s ===\n" % date |
||
89. sor: | 89. sor: | ||
listPage = wikipedia.Page(site, u"Segítség:Szubcsonk") |
listPage = wikipedia.Page(site, u"Segítség:Szubcsonk") |
||
oldText = listPage.get() |
oldText = listPage.get() |
||
listRe = re.compile("(?<= |
listRe = re.compile(ru"(?<=\Q<!-- szubcsonk lista eleje -->\E).*?(?=\Q<!-- szubcsonk lista vége -->\E)", |
||
").*?(?=" + re.escape(u"<!-- szubcsonk lista vége -->") + ")", |
|||
flags = re.DOTALL) |
flags = re.DOTALL) |
||
newText = listRe.sub(listText, oldText) |
newText = listRe.sub(listText, oldText) |
||
102. sor: | 101. sor: | ||
tmpl = wikipedia.Page(site, pageName) |
tmpl = wikipedia.Page(site, pageName) |
||
oldText = tmpl.get() |
oldText = tmpl.get() |
||
groupRe = re.compile("(?<= |
groupRe = re.compile(ru"(?<=\Q<!-- kezdet:\E([<=>]\d)\Q -->\E).*?(?=\Q<!-- vég:\E\1\Q -->\E)", |
||
").*?(?=" + re.escape(u"<!-- vég:") + "\\1" + re.escape(" -->") + ")", |
|||
flags = re.DOTALL) |
flags = re.DOTALL) |
||
newText = groupRe.sub(self.listStubsOfGivenAge, oldText) |
newText = groupRe.sub(self.listStubsOfGivenAge, oldText) |
||
118. sor: | 116. sor: | ||
dates = self.substubs.keys() |
dates = self.substubs.keys() |
||
dates.sort( |
dates.sort(key=str2date) |
||
liststr = "" |
liststr = "" |
||
for date in dates: |
for date in dates: |
||
132. sor: | 130. sor: | ||
return liststr |
return liststr |
||
def datesort(date1, date2): |
|||
return cmp(str2date(date1), str2date(date2)) |
|||
monthIdx = date.formats['MonthName'][site.language()] |
monthIdx = date.formats['MonthName'][site.language()] |
||
def str2date(date): |
def str2date(date): |
||
datere = re.compile("( |
datere = re.compile(r"(\d{4}). (" + monthptrn + ") (\d\d?).") |
||
m = datere.match(date) |
m = datere.match(date) |
||
if m: |
if m: |
||
169. sor: | 164. sor: | ||
finally: |
finally: |
||
wikipedia.stopme() |
wikipedia.stopme() |
||
</ |
</source> |
A lap 2009. december 28., 01:45-kori változata
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
-ro csak olvasás mód teszteléshez, nem módosít a lapokon
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 [[Segítség:Szubcsonk]] lap
\"Aktuális szubcsonkok\" szakaszába.
"""
import sys, re, datetime
import wikipedia, date, pagegenerators
site = wikipedia.getSite()
monthptrn = "(?:" + '|'.join(date.makeMonthNamedList(site.language(), '%s')) + ")"
dateptrn = r"\d{4}\. *" + monthptrn + r" *\d\d?\."
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.title())
except wikipedia.NoPage:
wikipedia.output(u"HIBA: Nem találom a %s lapot" % page.title())
continue
except wikipedia.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:
wikipedia.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:
wikipedia.output(u"HIBA: Az időbélyeget nem sikerült pótolnom")
return unknown
def listStubs(self):
listText = u"\n"
dates = self.substubs.keys()
dates.sort(key=str2date)
for date in dates:
listText += "=== %s ===\n" % date
for page in self.substubs[date]:
listText += "* [[%s]]\n" % page
wikipedia.output(listText)
if not self.readOnly:
listPage = wikipedia.Page(site, u"Segítség:Szubcsonk")
oldText = listPage.get()
listRe = re.compile(ru"(?<=\Q<!-- szubcsonk lista eleje -->\E).*?(?=\Q<!-- szubcsonk lista vége -->\E)",
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 = wikipedia.Page(site, pageName)
oldText = tmpl.get()
groupRe = re.compile(ru"(?<=\Q<!-- kezdet:\E([<=>]\d)\Q -->\E).*?(?=\Q<!-- vég:\E\1\Q -->\E)",
flags = re.DOTALL)
newText = groupRe.sub(self.listStubsOfGivenAge, oldText)
if newText != oldText:
wikipedia.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 = self.substubs.keys()
dates.sort(key=str2date)
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 + "]]";
if liststr == "":
liststr = "''nincs ilyen szubcsonk''"
return liststr
monthIdx = date.formats['MonthName'][site.language()]
def str2date(date):
datere = re.compile(r"(\d{4}). (" + monthptrn + ") (\d\d?).")
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 wikipedia.handleArgs():
if arg == '-ro':
readOnly = True
else:
wikipedia.output(u"Nem várt argumentum: " + arg)
sys.exit(1)
tmpl = wikipedia.Page(site, u"Sablon:Szubcsonk")
gen = pagegenerators.PreloadingGenerator(
pagegenerators.ReferringPageGenerator(tmpl, onlyTemplateInclusion = True))
SzubcsonkBot(gen, readOnly = readOnly).run()
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()