import urllib.request
import time
import pywikibot
import json
import operator
from datetime import datetime, timedelta

def getStatsDay(day, month, year) :
    url = "https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/"+ year +"/"+ month + "/" + day
    dataUntreated = {}
    
    print("Get data for the " + day + "/" + month + "/" + year + "... " + url)
     
    # Collecte des données et traitement ############################
    try:
        callApi = urllib.request.urlopen(url)
        resultApi = callApi.read().decode('utf-8')
        resultJson = json.loads(resultApi)
    
        for oneData in resultJson['items'][0]['articles']:
            dataUntreated[oneData['article']] = int(oneData['views'])
        
        return dataUntreated
    except Exception as ex:
        print(ex)
    ###################################################################
    

def generateReport():
    removeDay = 1
    numberOfDays = 7
    listOfDays = []
    finalReport = {}

    # Génération d'une liste contenant les numberOfDays derniers jours #
    while removeDay <= numberOfDays:
        theDate = datetime.now() - timedelta(days=removeDay)
        day = theDate.strftime("%d")
        month = theDate.strftime("%m")
        year = theDate.strftime("%Y")
        listOfDays.append({'jour': str(day), 'mois': str(month), 'annee': str(year)})
        removeDay += 1
    ###################################################################

    # Génération de la liste final par ordre décroissant ##############
    for i in listOfDays:
        dataJson = getStatsDay(i['jour'], i['mois'], i['annee'])
        for j in dataJson:
            try : 
                # Adds the number of views
                finalReport[j] = finalReport[j] + dataJson[j]
            except KeyError:
                # Add the article in the dict if it doesn't exist
                finalReport[j] = dataJson[j]
            except Exception as e:
                print('Error unexcepted :' + e)
                exit()

    finalReport = sorted(finalReport.items(), key=operator.itemgetter(1), reverse=True)
    ###################################################################
    
    # Génération du rapport finak #####################################
    message = '{{Wikimag/DébutRapport}}\n'
    message +=('{| class="wikitable"\n'
            '|+\n'
            '|Rang\n'
            '|Article\n'
            '|Vues\n'
            '|Image\n'
            '|Notes\n')

    k = 0
    m = 0
    kMax = 25

    while k < kMax :
        l = finalReport[k]
        nomArticle = l[0].replace('_',' ')
        nbrVues = str(l[1])
        
        try :
            if not nomArticle.startswith('Wikipédia:') and not nomArticle.startswith('Spécial:') and not nomArticle.startswith('Special:') and not nomArticle.startswith('Sp?cial:') and not nomArticle.startswith('Fichier:') and not nomArticle.startswith('Defense Advanced Research Projects Agency') and not nomArticle.startswith('France') and not nomArticle.startswith('Accueil'):
                m += 1
                
                message += '|-\n'
                message += '|'+ str(m) + '\n'
                message += "|[[" + nomArticle + "]]\n"
                message += "|{{unité|"+ nbrVues + "|vues}}\n"
                message += "|[[Fichier:Defaut.svg|100px]]\n"
                message += "|Description en cours d'écriture.\n"
            else:
                kMax = kMax + 1 ### Page Wikipédia:, Spécial:, Special: ou Fichier: a été détectée. Suppression et incrémentation pour avoir un TOP 10
        except Exception as e:
            print('Error unexcepted :' + e)
            exit()
            
        k += 1
    message += '|}\n'
    message += '{{Wikimag/FinRapport}}'
    
    return message
    #####################################################################

message = generateReport()
print(message)
message += '1'
Get data for the 20/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/20
Get data for the 19/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/19
Get data for the 18/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/18
Get data for the 17/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/17
Get data for the 16/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/16
Get data for the 15/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/15
Get data for the 14/02/2018... https://wikimedia.org/api/rest_v1/metrics/pageviews/top/fr.wikipedia.org/all-access/2018/02/14
{{Wikimag/DébutRapport}}
{| class="wikitable"
|+
|Rang
|Article
|Vues
|Image
|Notes
|-
|1
|[[Sylvester Stallone]]
|{{unité|318643|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|2
|[[Martin Fourcade]]
|{{unité|249202|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|3
|[[Laeticia Hallyday]]
|{{unité|232053|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|4
|[[Saint-Valentin]]
|{{unité|194150|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|5
|[[La casa de papel]]
|{{unité|192723|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|6
|[[Jeux olympiques d'hiver de 2018]]
|{{unité|177588|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|7
|[[Les Bracelets rouges (série télévisée française)]]
|{{unité|175925|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|8
|[[Nordahl Lelandais]]
|{{unité|166351|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|9
|[[Didier Lockwood]]
|{{unité|144210|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|10
|[[Catégorie:Série télévisée italienne]]
|{{unité|135388|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|11
|[[Le Labyrinthe (film, 2014)]]
|{{unité|133786|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|12
|[[Laura Smet]]
|{{unité|126829|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|13
|[[Tableau des médailles des Jeux olympiques d'hiver de 2018]]
|{{unité|119907|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|14
|[[Le Labyrinthe : La Terre brûlée]]
|{{unité|114993|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|15
|[[Black Panther (film)]]
|{{unité|114081|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|16
|[[Gabriella Papadakis]]
|{{unité|91706|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|17
|[[Maître Gims]]
|{{unité|88927|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|18
|[[Affaire Maëlys]]
|{{unité|87898|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|19
|[[Le Labyrinthe : Le Remède mortel]]
|{{unité|84558|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|20
|[[Johnny Hallyday]]
|{{unité|79418|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|21
|[[Cristiano Ronaldo]]
|{{unité|77468|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|22
|[[Grand Corps Malade]]
|{{unité|75556|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|23
|[[David Hallyday]]
|{{unité|74853|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|24
|[[Michel Fourniret]]
|{{unité|73571|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|-
|25
|[[Laurent Wauquiez]]
|{{unité|69356|vues}}
|[[Fichier:Defaut.svg|100px]]
|Description en cours d'écriture.
|}
{{Wikimag/FinRapport}}
site = pywikibot.Site('fr', 'wikipedia')
page = pywikibot.Page(site, u"Wikipédia:Wikimag/2018/9/Rapport_de_trafic")
page.text = message
page.save(summary='Test modificaion mineure', minor=True)
Page [[fr:Wikipédia:Wikimag/2018/9/Rapport de trafic]] saved