Usuário:Ederporto/Testes/Programação

Crystal button cancel.svg Se deseja eliminar uma página, escreva {{ER|1|~~~~}} no código fonte.

Este código está escrito em linguagem de programação Python.

A partir de uma lista de artigos com determinadas datas, o código pega os dados sobre visualizações dos artigos da lista.

#Imports
from datetime import datetime
from dateutil.relativedelta import relativedelta
import urllib.request as ur
import requests
import json

#Transform the date from string to date format
def parse_date(stringDate):
    return datetime.strptime(stringDate.ljust(10, '0'), '%Y%m%d%H')

#Transform the date from date format to string
def format_date(d):
    return datetime.strftime(d, '%Y%m%d%H')

#Return the url given the article and the date
def endpoint(article,date,language,project):
    return (requests.get(''.join(["https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/",language,".",project,"/all-access/user/",article,"/daily/",format_date(parse_date(date) - relativedelta(days=240)),"/",format_date(parse_date(date) + relativedelta(days=239))]))).url

#Get the views grouped by bimester for the 4 bimesters before and the 4 after de date
def Bimonthlysum(article,Listofdates,Listsofviews,date):
    i=0
    s1=0     #Total views on the 4th bimester before the date
    s2=0     #Total views on the 3th bimester before the date
    s3=0     #Total views on the 2nd bimester before the date
    s4=0     #Total views on the 1st bimester before the date
    s5=0     #Total views on the 1st bimester after the date
    s6=0     #Total views on the 2nd bimester after the date
    s7=0     #Total views on the 3th bimester after the date
    s8=0     #Total views on the 4th bimester after the date
    while i<480:
        aux = format_date(parse_date(date) - relativedelta(days=240-i))
        if aux in Listofdates:
            if i<60:
                s1 = s1 + Listofviews[Listofdates.index(aux)]
            elif i<120:
                s2 = s2 + Listofviews[Listofdates.index(aux)]
            elif i<180:
                s3 = s3 + Listofviews[Listofdates.index(aux)]
            elif i<240:
                s4 = s4 + Listofviews[Listofdates.index(aux)]
            elif i<300:
                s5 = s5 + Listofviews[Listofdates.index(aux)]
            elif i<360:
                s6 = s6 + Listofviews[Listofdates.index(aux)]
            elif i<420:
                s7 = s7 + Listofviews[Listofdates.index(aux)]
            else:
                s8 = s8 + Listofviews[Listofdates.index(aux)]
        i=i+1
    print ('%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d'%(article,s1,s2,s3,s4,s5,s6,s7,s8))

Articles=["Problema de valor inicial", "Hiroshi Okamura", "Processo estocástico", "Nervo musculocutâneo", "Sistema circulatório equino", "Saúde canina", "Portal:Probabilidade e estatística", "Membros do cavalo", "Mediana (estatística)", "Jogo de computação baseado em humanos"]
Dates=["20160829", "20160831", "20161017", "20161026", "20161107", "20161119", "20161207", "20161207", "20161209", "20161212"]
Wikis=["pt", "pt", "pt", "pt", "pt", "pt", "pt", "pt", "pt", "pt"]
Projects=["wikipedia", "wikipedia", "wikipedia", "wikipedia", "wikipedia", "wikipedia", "wikipedia", "wikipedia", "wikipedia", "wikipedia"]

#Printing the header
print ('\t\tBefore\t\t\t\tAfter')
print ('Articles\t4ºbi\t3ºbi\t2ºbi\t1ºbi\t1ºbi\t2ºbi\t3ºbi\t4ºbi')

for i in range(len(Articles)):
    url = endpoint(Articles[i],Dates[i],Wikis[i],Projects[i])
    response=ur.urlopen(url)
    content=response.read()
    date=json.loads(content.decode("utf8"))
    
    Listofdates=[]
    Listofviews=[]
    for item in date['items']:
        Listofdates.append(item['timestamp'])
        Listofviews.append(item['views'])
    Bimonthlysum(Articles[i],Listofdates,Listofviews,Dates[i])