Skip to content

Instantly share code, notes, and snippets.

@danmichaelo
Last active August 29, 2015 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danmichaelo/8ef75811e74cd9d76cfc to your computer and use it in GitHub Desktop.
Save danmichaelo/8ef75811e74cd9d76cfc to your computer and use it in GitHub Desktop.
Bot: Datomerking av vedlikeholdsmaler
# encoding=utf-8
import json
import time
from mwclient import Site
from mwtemplates import TemplateEditor
import logging
import logging.handlers
logger = logging.getLogger('bot')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s %(levelname)s] %(message)s')
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
warn_handler = logging.FileHandler('warnings.log')
warn_handler.setLevel(logging.WARNING)
warn_handler.setFormatter(formatter)
logger.addHandler(warn_handler)
logger.info('Starter...')
def locate_template(ed, tplNames):
for n in tplNames:
if n in ed.templates:
return ed.templates[n][0]
return None
def locate_date(page, tplNames):
ts = None
for rev in page.revisions(prop='timestamp|content'):
if '*' not in rev:
return None
te = TemplateEditor(rev['*'])
tpl = locate_template(te, tplNames)
if tpl is None:
return ts
elif 'timestamp' not in rev:
return None
else:
ts = rev['timestamp']
def main():
config = json.load(open('config.json', 'r'))
site = Site(('https', 'no.wikipedia.org'), clients_useragent=u'Datomerking av vedlikeholdsmaler. Run by [[User:Danmichaelo]]. BasedOnMwClient/0.7')
site.login(config['username'], config['password'])
tplNames = ['Opprydning']
tplPage = site.pages[u'Mal:%s' % (tplNames[0])]
tplNames.extend([x.page_title for x in tplPage.backlinks(filterredir='redirects')])
for page in tplPage.embeddedin():
te = TemplateEditor(page.text())
tpl = locate_template(te, tplNames)
if tpl is None:
logger.warn(u'%s: Malen ble ikke funnet direkte på siden.' % (page.page_title))
continue
if 'dato' in tpl.parameters:
logger.debug(u'%s: {{%s}} har allerede dato-parameter' % (page.page_title, tpl.page_title))
continue
dato = locate_date(page, tplNames)
if dato is None:
logger.warn(u'%s: Fant ikke tidspunktet da malen ble satt inn.' % (page.page_title))
continue
dato = time.strftime('%Y-%m-%d', dato)
tpl.parameters['dato'] = dato
logger.info(u'[[%s]]: Legger til |dato=%s' % (page.page_title, dato))
# page.save(te.wikitext(), u'Bot: Legger inn |dato=%s i {{%s}}' % (dato, tpl.page_title)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment