#!/usr/bin/env python 
# -*- coding: UTF-8 -*-

import urllib.request, re, os, time, requests
def recup_tweets_wikinews() :
    #flux RSS du twitter de Wikinews fr
    file = urllib.request.urlopen('http://twitrss.me/twitter_user_to_rss/?user=fr_wikinews')

    listeurl = []
    for i in file :
        i = i.strip()
        i = i.decode('utf-8')
        if i.startswith('<guid>') :
            i = i.split('<guid>')
            i = i[1].split("</guid>")
            i = i[0]
            listeurl.append(i)

    code = []
    for i in listeurl :
        i = i.split('/status/')
        i = i[1]
        code.append(i)

    #Récupération des éléments de remplissage du modèle {{Twitter}}
    nom_auteur = []
    nom_de_suivi = []
    date = []
    textep = []
    b = 0
    for i in code :
        if b == 0 :
            tweet = urllib.request.urlopen('https://twitter.com/fr_wikinews/status/'+i)
            for a in tweet :
                a = a.strip()
                a = a.decode('utf-8')
                if a.startswith('<strong class="fullname js-action-profile-name show-popup-with-id" data-aria-label-part>') :
                    a = a.split('<strong class="fullname js-action-profile-name show-popup-with-id" data-aria-label-part>')
                    a = a[1].split('</strong>')
                    a = a[0]
                    nom_auteur.append(a)
                
                if a.startswith('<span>&rlm;</span><span class="username js-action-profile-name" data-aria-label-part><s>@</s>') :
                    a = a.split('<span>&rlm;</span><span class="username js-action-profile-name" data-aria-label-part><s>@</s><b>')
                    a = a[1].split('</b></span>')
                    a = a[0]
                    a = '@' + a
                    nom_de_suivi.append(a)
                
                if a.startswith('<a href="/fr_wikinews/status/'+i+'" class="tweet-timestamp js-permalink js-nav js-tooltip" title="') :
                    a = a.split('js-permalink js-nav js-tooltip" title="')
                    a = a[1].split('"  data-conversation-id="')
                    a = a[0]
                    date.append(a)
                
                if a.startswith('<title>Wikinews francophone on Twitter: &quot;') :
                    a = a.split('<title>Wikinews francophone on Twitter: &quot;') 
                    a = a[1].split('&quot;</title>')
                    a = a[0]
                    textep.append(a)
    #Ajoute un <nowiki> autour de l'url pour contourner la black liste de méta
    #voir aussi pour juste supprimer le https://
    texte = []  
    for i in textep :
        i = i.replace('http://','<nowiki>https://')
        i = i.replace('https://','<nowiki>https://')
        try :
            g = i.split('https://')
            i = g[0]
            g = g[1].split(' ')
        
            try :
                j = g[1:]
            except :
                j = ''
            
            x = i + g[0]
            b = 0
            jp = ''
            for a in j :
                jp = jp + j[b]
                b = b + 1
            try :
                urlT = x.split('<nowiki>')
                urlT = 'https://'+urlT[1]
                fileT = urllib.request.urlopen(urlT)
                for p in fileT :
                    p = p.decode('utf-8')
                    if p.startswith('<title>') :
                        p = p.split('<title>')
                        p = p[1]
                        p = p.split(' — Wikinews</title>')
                        t = p[0]
                        print(t)
                print(urlT)    
                x = i +" '''{{nobr|[["+t+"|→ Lire l'article]]}}''' "+ jp
                x =  x.replace('<nowiki>','')
            except :
                x = x +'</nowiki> '+ jp
            texte.append(x)
        
        except :
            texte.append(i)     
        
    return code, nom_auteur, nom_de_suivi, listeurl, texte, date



#Remplissage du modèle
def recup_modele(code, nom_auteur, nom_de_suivi, listeurl, texte, date) :

    contenu = '<small>Dernière actualisation le ~~~~~</small>'
    a = 0
    for i in code : 
        bloc1 = '<!-- <code tweet>'+ i +'</code tweet> -->'
        bloc2 = '{{Twitter|nom auteur=' + nom_auteur[a] + '|nom de suivi=' + nom_de_suivi[a] + '|texte =' + texte[a] + '|lien profil=https://twitter.com/'+ nom_de_suivi[a] +'|lien id='+ listeurl[a ]+'|date='+date[a]+'}}'
        a = a + 1
        #print(bloc1+bloc2) 
        contenu = contenu+"\n"+bloc1+bloc2
       
    return contenu


k = 0
while k < 1 :
    try :
        code, nom_auteur, nom_de_suivi, listeurl, texte, date = recup_tweets_wikinews()
        contenu = recup_modele(code, nom_auteur, nom_de_suivi, listeurl, texte, date)
    
        username = 'Matthobot'
        password = 'Matthobot@onemb59hk1offac6qpdboa65vueo6jba'
        baseurl = 'https://fr.wikinews.org/w/'
        summary = "[Action Bot] Mise à jour Le Live Wikinews"
        message = contenu
        #sectiontitle = bloc1
        title = 'Discussion_utilisateur:Mattho69/Le_Live_Wikinews'

        # Login request
        payload = {'action': 'query', 'format': 'json', 'utf8': '', 'meta': 'tokens', 'type': 'login'}
        r1 = requests.post(baseurl + 'api.php', data=payload)

        #print('1')
        # login confirm
        login_token = r1.json()['query']['tokens']['logintoken']
        payload = {'action': 'login', 'format': 'json', 'utf8': '', 'lgname': username, 'lgpassword': password, 'lgtoken': login_token}
        r2 = requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies)

        #print('2')
        # get edit token2
        params3 = '?format=json&action=query&meta=tokens&continue='
        r3 = requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies)
        edit_token = r3.json()['query']['tokens']['csrftoken']

        #print('3')
        edit_cookie = r2.cookies.copy()
        edit_cookie.update(r3.cookies)
        #print (edit_token)
        
        # save action
        payload = {'action': 'edit', 'assert': 'user', 'format': 'json', 'bot': '1', 'utf8': '', 'text': message,'summary': summary, 'title': title, 'token': edit_token}
        r4 = requests.post(baseurl + 'api.php', data=payload, cookies=edit_cookie)
        
        print('Le Live Wikinews')
        time.sleep(3600)
    
    except :
        print('Non mis à jour')
    
    
    

#Récupération des Tweets déjà présents

file = urllib.request.urlopen('https://fr.wikinews.org/w/index.php?title=Discussion_utilisateur:Mattho69/Le_Live_Wikinews&action=raw')

codeexit = []
listetwexit = []
for i in file :
    print(i)
    i = i.decode('utf-8')
    print(i)
    if i.startswith('<code tweet>') :
        listetwexit.append(i)
        print(i)
        a = i.split('<code tweet>')
        a = a[1].split('</code tweet>')
        a = a[0]
        codeexit.append(a)
        print(a)
        print(i)
France : le chômage repart à la hausse en décembre
https://t.co/jDlJOoZ2yO
Astrophysique : une nouvelle théorie sur l'origine de la Lune
https://t.co/mUuge52VVE
Championnat de France 2016-2017 de Ligue 2 : les résultats de la vingt-et-unième journée
https://t.co/Vqj5gJwANN
France : un randonneur meurt à Abondance
https://t.co/76SNOcGq5S
France : des dizaines de cochons d'Inde massacrés dans l'Hérault
https://t.co/9bKebBe7sq
Gambie : le président Jammeh laisse le pouvoir et aurait vidé les caisses de l’État
https://t.co/jV3f6376yg
Politique française : Claude Guéant condamné par la justice
https://t.co/6DvAsUxcZq
Championnat d'Espagne de football 2016-2017 : les résultats de la dix-neuvième journée
https://t.co/3BiUk1Qb9R
Championnat de France 2016-2017 de Ligue 1 : les résultats de la vingt-et-unième journée
https://t.co/JZx69i3zcI
France : Giscard devient le plus vieux président de la République de l'histoire
https://t.co/tdLoaKtDzS
France : capture d'un chameau errant sur une route
https://t.co/dtaWGLiajA
France : nouvel épisode de pollution aux particules fines
https://t.co/j2kHDCJQ9r
Yémen : des membres d’Al-Qaïda tués par des tirs de drones
https://t.co/RP62Trqh6X
Inde : plus de trente morts dans un déraillement de train
https://t.co/EIKhkLMtYl
France : de nombreux hommages rendus à l'abbé Pierre
https://t.co/b5wg6mrnqd
France : le centre Georges Pompidou a quarante ans
https://t.co/eVVenZ0TsL
Douze cadavres mutilés retrouvés dans un port mexicain
https://t.co/u3h3cGvWVV
France : une randonneuse à raquettes se tue en Isère
https://t.co/5pD7LVMdxt
Italie : un hôtel enseveli par la neige
https://t.co/qZodBg2Yno
Les singes seraient en voie d'extinction
https://t.co/HwuDtayyIm
Le Live Wikinews