Usuari:CobainBot/scripts/cawiki/pace.py
Aparença
#/usr/bin/python
# -*- coding: utf8 -*-
# By: Gerardduenas
# new features: Coet 2015-08-14
# updated: Coet 2023-02-27
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pywikibot import Site, Page
from pywikibot.data import api
# globals
site = Site('ca', 'wikipedia', 'TronaBot')
class PaceResult:
def __init__(self, hours):
self.last_hours = hours
self.articles = 0
self.new_articles = 0
self.last_article = ''
self._title = ''
self.summary = ''
@property
def title(self):
return self._title
@title.setter
def title(self, name: str):
self._title = f'Plantilla:{name}'
class Template(Page):
def __init__(self, pace: PaceResult):
Page.__init__(self, site, pace.title)
self.pace: PaceResult = pace
def write(self):
text = f'{self.pace.new_articles}\n<noinclude>[[Categoria:Plantilles]]</noinclude>'
comment = f'Actualitzant articles creats en {self.pace.summary} ({self.pace.new_articles}).'
self.put(text, comment)
class Paces:
def __init__(self):
self.start_time = datetime.now()
def query(self, params):
query = api.Request(site, parameters=params)
return query.submit()
def get_new_arts(self, hours=24):
pace_result = PaceResult(hours)
rc_end_dt = datetime.now() - relativedelta(hours=hours)
params = {
"action": "query",
# newarticles
"list": "recentchanges",
"rclimit": "max",
"rctype": "new",
"rcprop": ("title", "timestamp"),
"rcnamespace": 0,
"rcshow": "!redirect",
"rcend": f'{rc_end_dt:%Y-%m-%dT%H:%M:%SZ}',
# statistics
"meta": "siteinfo",
"siprop": "statistics",
"indexpageids": "",
"rawcontinue": ""
}
rcstart = True
new_arts = 0
data = None
while rcstart:
if isinstance(rcstart, str):
params['rcstart'] = rcstart.split('|')[0]
data = self.query(params)
rcstart = data['query-continue']['recentchanges']['rccontinue'] if "query-continue" in data else None
new_arts += len(data['query']['recentchanges'])
pace_result.articles = data['query']['statistics']['articles']
pace_result.last_article = data['query']['recentchanges'][0]['title'] if data['query']['recentchanges'] else ""
pace_result.new_articles = new_arts
return pace_result
def run(self):
last_24h_pace = self.get_new_arts(24)
last_24h_pace.title = 'Ritme'
last_24h_pace.summary = 'les darreres 24 hores'
last_7d_pace = self.get_new_arts(168)
last_7d_pace.title = 'Ritme7dies'
last_7d_pace.summary = 'els darrers 7 dies'
last_30d_pace = self.get_new_arts(720)
last_30d_pace.title = 'Ritme30dies'
last_30d_pace.summary = 'els darrers 30 dies'
for template in (Template(last_24h_pace), Template(last_7d_pace), Template(last_30d_pace)):
template.write()
if __name__ == '__main__':
paces = Paces()
paces.run()