Gebruiker:Edoderoobot/daily-pagestat-nlwiki.py
Appearance
#sudo pip install mwviews
from datetime import date,datetime,timedelta
#import datetime
import pywikibot
from mwviews.api import PageviewsClient
hasreftxt=u'√'
hasnoreftxt=''
def hasreferences(articletitle):
site=pywikibot.Site()
print('Artikel: [%s]' % (articletitle))
if (articletitle.find(':')>0):
return('')
page=pywikibot.Page(site, articletitle);
if (page.text.lower().find('<ref>') > 0):
return(hasreftxt)
if (page.text.lower().find('<ref name') > 0):
return(hasreftxt)
return(hasnoreftxt)
def yesterdaysrank(listofranks, article, rankyesterday):
thisrank = 0
for onerank in listofranks:
thisrank += 1
if article==onerank['article']:
if thisrank>rankyesterday:
return str(thisrank)+u' \u2191'+str(thisrank-rankyesterday)
elif thisrank<rankyesterday:
return str(thisrank)+u' \u2193'+str(rankyesterday-thisrank)
else:
return (u'nieuw')
return str(thisrank)+u'='
maxlst = 100 #a short list for now
nrdays=7 #1 week for now
topxxlist = []
debugmodus=True
debugmodus=False
endday = date.today()-timedelta(days=1)
startday = endday - timedelta(days=nrdays)
yesterday = endday-timedelta(days=1) #to calculate position of day before
mywiki = u'nl.wikipedia'
p = PageviewsClient(mywiki) #initialize
todaystoplist = p.top_articles(mywiki, limit=maxlst) #get the current topxx of articles
yesterdaystoplist = p.top_articles(mywiki, limit=2*maxlst, year=yesterday.year, month=yesterday.month, day=yesterday.day)
for articles in todaystoplist:
if debugmodus:
print (articles['article'])
probe=p.article_views(mywiki,[articles['article']],start=startday,end=endday)
topxxlist.append(articles['article'])
topxxtable = p.article_views(mywiki,topxxlist,start=startday,end=endday)
wikistr = (u'Onderstaande tabel geeft de statistieken van de meest bezochte artikelen op de Nederlandstalige Wikipedia van %s. \n\n{| class=\"wikitable sortable\"\n|-\n! Positie !! Gisteren !! Artikel !! A !! Aantal views op ') % (str(endday))
dayloop=endday
while dayloop>=startday:
wikistr += str(dayloop)+'!!'
dayloop -= timedelta(days=1)
wikistr = wikistr[:len(wikistr)-2] + '\n'
rank = 0
for article in topxxlist:
rank += 1
rankyesterday = yesterdaysrank(yesterdaystoplist,article,rank)
prnarticle = article.replace('Bestand',':Bestand',1)
prnarticle = prnarticle.replace('Categorie',':Categorie',1)
prnarticle = prnarticle.replace('Sjabloon',':Sjabloon',1)
if (prnarticle[0:1]==':'):
prnarticle=prnarticle[1:]
linestr = u'|-\n|%i\n|%s\n|[[:%s]]\n|%s\n' % (rank,rankyesterday,prnarticle.replace('_',' '),hasreferences(article))
dayloop=endday
while (dayloop>=startday):
indexdate = datetime.combine(dayloop,datetime.min.time()) #make date in right format
hitsoneday = topxxtable[indexdate][article]
if hitsoneday is None: hitsoneday = 0
linestr += '|%s\n' % '{0:6d}'.format(hitsoneday)
dayloop -= timedelta(days=1)
wikistr += linestr
wikistr += "\n|}\n"
if not debugmodus:
site = pywikibot.getSite(u'nl')
yesterday=date.today()-timedelta(days=1)
pywikibot.Page(site, u'User:Edoderoo/nl-stats-gisteren/%4d%02d%02d'%(yesterday.year,yesterday.month,yesterday.day)).put(wikistr, comment=u'Update stats. Source on https://goo .gl/tKMxHv') #Save page
survey = pywikibot.Page(site,'User:Edoderoo/nl-stats-gisteren')
survey.text = '%s\n%s' % ('*[[Gebruiker:Edoderoo/nl-stats-gisteren/%4d%02d%02d|%s %02d %02d %4d]]' % (yesterday.year,yesterday.month,yesterday.day,'xx',yesterday.day,yesterday.month,yesterday.year),survey.text)
pywikibot.Page(site,'User:Edoderoo/nl-stats-gisteren').put(survey.text,comment='new statistics page created for yesterday')
else:
print("%s" % wikistr)