# -*- coding: utf-8 -*-
"""
Kikeresi a Portál:Portálok#Portálok listája szakaszból a karbantartókat,
és egy allapra gyűjti az utolsó szerkesztésük dátumát.
"""
# (C)(D)(E)(F)(G)(A)(H)(C) Bináris, 2016. augusztus 20.
# Első összeütött változat, alkalmi használatra, nincs hibakezelés
import re
import time
import wikipedia as pywikibot
import userlib
# Általános beállítások
FROMPAGE = u'Portál:Portálok'
TOPAGE = u'Portál:Portálok/Karbantartók jelenléte'
COMMENT = u'A portálkarbantartók listájának frissítése az utolsó szerkesztésük dátumával'
site = pywikibot.getSite()
HEADER = u'''
{{tudnivalók|Ezen az allapon a [[Portál:Portálok#Portálok listája]] szakaszban felsorolt karbantartók
utolsó szerkesztésének dátumát listázzuk, hogy látható legyen, köztünk vannak-e még a karbantartásra
vállalkozó szerkesztők. A dátumok UTC-ben vannak megadva, ezért ha valaki éjfél után kevéssel
szerkesztett utoljára, egy nap eltérés lehet.
Az átnevezett szerkesztőket a program nem követi, ilyenkor a ''Nincs ilyen szerkesztő'' szöveg jelenik meg.
Miután frissítetted a szerkesztő nevét az eredeti listában, a program újbóli futtatása javítja a hibát.
Utolsó frissítés: ~~~~
<br /><small>
Egyelőre nem frissül automatikusan, [[user:Bináris|]]tól lehet kérni a frissítését,
vagy önállóan futtatni. A frissítés újragenerálja a lapot, törli az esetleges megjegyzéseket.
Kód: [[User:BinBot/portalkarbantartok.py]]</small>}}
\n\n
'''
months = [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']
thead = u'{| {{széptáblázat}}\n! Szerkesztő !! Utolsó szerkesztés'
def daystring(d):
return d[1:] if d.startswith('0') else d
def long2date(l):
s = str(l)
d = None
if re.match(ur'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z', s):
d = time.strptime(s, '%Y-%m-%dT%H:%M:%SZ')
else:
d = time.strptime(s, '%Y%m%d%H%M%S')
d = (time.strftime('%Y', d), months[int(time.strftime('%m', d)) - 1], daystring(time.strftime('%d', d)))
f = '%s. %s %s.' % d
return f
def trow(usertuple):
return '\n|-\n| {{user|%s}} || %s' % (usertuple[0], usertuple[1])
def namesort(usertuple):
return usertuple[0].lower()
def datesort(usertuple):
return str(usertuple[2]) + usertuple[0].lower()
# A karbantartók listája
usernames = set()
text = pywikibot.Page(site, FROMPAGE).get()
sectionpattern = re.compile(ur'(?s)== Portálok listája ==(.*?)== Portáltervek listája ==')
section = sectionpattern.search(text).group(1)
# | 1. || [[Portál:Biológia|Biológia]] || [[2005]]. [[október 23.]] || [[User:NCurse|NCurse]] || [[User:NCurse|NCurse]]
rowpattern = re.compile(ur'\| *\d+\. *\|\|.*?\|\|.*?\|\|.*?\|\|(.*)')
userpattern = re.compile(ur'(?i)(\[\[(User|Szerkesztő):|\{\{user2?\|)(.*?)(\||\]\]|\}\})')
for row in rowpattern.findall(section):
for username in userpattern.finditer(row):
usernames.add(username.group(3))
# Az utolsó szerkesztések lekérdezése
users = set()
for username in usernames:
user = userlib.User(site, username)
if user.exists():
van = False # Jojoka2 kedvéért, aki átnevezés után újraregisztrált, de az új néven
# nincs szerkesztése, így átugornánk az egész sort
for contrib in user.contributions(1):
users.add((username, long2date(contrib[2]), contrib[2]))
van = True
if not van:
users.add((username, u'Nincs ilyen szerkesztő', 99999999999999L))
else:
users.add((username, u'Nincs ilyen szerkesztő', 99999999999999L))
text = HEADER
text += u'== Ábécében ==\nAz ékezetesek a végére kerültek.\n' + thead
for usertuple in sorted(users, key=namesort):
text += trow(usertuple)
text += '\n|}\n\n'
text += u'== Időrendben ==\n' + thead
for usertuple in sorted(users, key=datesort):
text += trow(usertuple)
text += u'\n|}\n\n[[Kategória:Portálok]]'
pywikibot.output(text)
# A lap frissítése
page = pywikibot.Page(site, TOPAGE)
page.put(text, comment=COMMENT, watchArticle=False, minorEdit=False, botflag=False)