import pywikibot
import mwparserfromhell

site = pywikibot.Site('fr', 'wikipedia')
liste = ["Rivière Nouvelle", "Rivière à la Truite (rivière Madawaska)", "Rivière Ouelle", "Rivière Patapédia", "Rivière Nepton (rivière de la Perdrix Blanche)", "Rivière Touladi", "Rivière du Grand Touradi", "Petite rivière Rimouski", "Petite rivière Touradi", "Rivière Verte (rivière-du-Loup)", "Rivière Sableuse", "Rivière Rocheuse (lac Morin)", "Rivière Saint-Denis (rivière Kamouraska)", "Rivière Owen", "Rivière à la Truite (rivière Matane)", "Rivière Rigoumabe", "Rivière aux Perdrix (rivière Boisbouscache)", "Ruisseau à l'Eau Claire (rivière Noire)", "Rivière Saint-Pierre (rivière Matapédia)", "Rivière du Petit Sault", "Rivière de la Sauvagesse", "Rivière Petchedetz Est", "Rivière Rimouski Est", "Rivière Saint-Hubert", "Rivière Patapédia Est", "Rivière à Paquet", "Rivière Petchedetz", "Petite rivière à la Truite (rivière à la Truite)", "Rivière des Vases (L'Isle-Verte)", "Rivière Plate (petite rivière Rimouski)", "Rivière Verte (rivière de l'Orient)", "Rivière Rouge (Bas-Saint-Laurent)", "Rivière Vaseuse", "Rivière aux Sapins (rivière aux Perches)", "Rivière Tamagodi", "Petite rivière Savane (lac Témiscouata)", "Rivière Sayabec", "Ruisseau à Pierre (Les Méchins)", "Rivière des Roches (rivière Verte)", "Rivière des Pointes", "Rivière Porc-Pic", "Rivière Tobégote", "Petite rivière Cap-Chat Est", "Rivière Towagodi", "Rivière des Prairies (petite rivière Bleue)"]
i = 0

for article in liste:
    page = pywikibot.Page(site, article)
    if page.isRedirectPage():
            page = page.getRedirectTarget()
    texte = page.get()

    texte = texte.replace("site=Commission de toponymie du Québec]|", "site=[[Commission de toponymie du Québec]]|")

    if page.text != texte:
        i +=1
        page.text = texte
        page.save(summary="correction d'un copié/collé présent sur plusieurs pages", minor=True)
        print(i)
Sleeping for 7.9 seconds, 2019-01-15 00:57:55
Page [[fr:Rivière Nouvelle]] saved
1
Sleeping for 8.6 seconds, 2019-01-15 00:58:04
Page [[fr:Rivière à la Truite (rivière Madawaska)]] saved
2
Sleeping for 8.7 seconds, 2019-01-15 00:58:14
Page [[fr:Rivière Ouelle]] saved
3
Sleeping for 8.6 seconds, 2019-01-15 00:58:24
Page [[fr:Rivière Patapédia]] saved
4
Sleeping for 8.7 seconds, 2019-01-15 00:58:34
Page [[fr:Rivière Nepton (rivière de la Perdrix Blanche)]] saved
5
Sleeping for 8.7 seconds, 2019-01-15 00:58:44
Page [[fr:Rivière Touladi]] saved
6
Sleeping for 8.7 seconds, 2019-01-15 00:58:54
Page [[fr:Rivière du Grand Touradi]] saved
7
Sleeping for 8.7 seconds, 2019-01-15 00:59:04
Page [[fr:Petite rivière Rimouski]] saved
8
Sleeping for 8.6 seconds, 2019-01-15 00:59:14
Page [[fr:Petite rivière Touradi]] saved
9
Sleeping for 8.9 seconds, 2019-01-15 00:59:24
Page [[fr:Rivière Verte (rivière-du-Loup)]] saved
10
Sleeping for 8.6 seconds, 2019-01-15 00:59:34
Page [[fr:Rivière Sableuse]] saved
11
Sleeping for 8.9 seconds, 2019-01-15 00:59:44
Page [[fr:Rivière Rocheuse (lac Morin)]] saved
12
Sleeping for 8.8 seconds, 2019-01-15 00:59:54
Page [[fr:Rivière Saint-Denis (rivière Kamouraska)]] saved
13
Sleeping for 8.6 seconds, 2019-01-15 01:00:04
Page [[fr:Rivière Owen]] saved
14
Sleeping for 8.8 seconds, 2019-01-15 01:00:14
Page [[fr:Rivière à la Truite (rivière Matane)]] saved
15
Sleeping for 8.8 seconds, 2019-01-15 01:00:24
Page [[fr:Rivière Rigoumabe]] saved
16
Sleeping for 8.9 seconds, 2019-01-15 01:00:34
Page [[fr:Rivière aux Perdrix (rivière Boisbouscache)]] saved
17
Sleeping for 8.7 seconds, 2019-01-15 01:00:44
Page [[fr:Ruisseau à l'Eau Claire (rivière Noire)]] saved
18
Sleeping for 8.5 seconds, 2019-01-15 01:00:55
Page [[fr:Rivière Saint-Pierre (rivière Matapédia)]] saved
19
Sleeping for 8.7 seconds, 2019-01-15 01:01:04
Page [[fr:Rivière du Petit Sault]] saved
20
Sleeping for 8.7 seconds, 2019-01-15 01:01:14
Page [[fr:Rivière de la Sauvagesse]] saved
21
Sleeping for 8.3 seconds, 2019-01-15 01:01:25
Page [[fr:Rivière Petchedetz Est]] saved
22
Sleeping for 8.7 seconds, 2019-01-15 01:01:34
Page [[fr:Rivière Rimouski Est]] saved
23
Sleeping for 8.7 seconds, 2019-01-15 01:01:45
Page [[fr:Rivière Saint-Hubert]] saved
24
Sleeping for 8.7 seconds, 2019-01-15 01:01:55
Page [[fr:Rivière Patapédia Est]] saved
25
Sleeping for 8.9 seconds, 2019-01-15 01:02:04
Page [[fr:Rivière à Paquet]] saved
26
Sleeping for 8.8 seconds, 2019-01-15 01:02:14
Page [[fr:Rivière Petchedetz]] saved
27
Sleeping for 8.8 seconds, 2019-01-15 01:02:25
Page [[fr:Petite rivière à la Truite (rivière à la Truite)]] saved
28
Sleeping for 8.8 seconds, 2019-01-15 01:02:34
Page [[fr:Rivière des Vases (L'Isle-Verte)]] saved
29
Sleeping for 8.8 seconds, 2019-01-15 01:02:45
Page [[fr:Rivière Plate (petite rivière Rimouski)]] saved
30
Sleeping for 8.8 seconds, 2019-01-15 01:02:54
Page [[fr:Rivière Verte (rivière de l'Orient)]] saved
31
Sleeping for 8.7 seconds, 2019-01-15 01:03:05
Page [[fr:Rivière Rouge (Bas-Saint-Laurent)]] saved
32
Sleeping for 8.8 seconds, 2019-01-15 01:03:15
Page [[fr:Rivière Vaseuse]] saved
33
Sleeping for 8.9 seconds, 2019-01-15 01:03:24
Page [[fr:Rivière aux Sapins (rivière aux Perches)]] saved
34
Sleeping for 8.7 seconds, 2019-01-15 01:03:35
Page [[fr:Rivière Tamagodi]] saved
35
Sleeping for 8.6 seconds, 2019-01-15 01:03:45
Page [[fr:Petite rivière Savane (lac Témiscouata)]] saved
36
Sleeping for 8.8 seconds, 2019-01-15 01:03:55
Page [[fr:Rivière Sayabec]] saved
37
Sleeping for 8.8 seconds, 2019-01-15 01:04:05
Page [[fr:Ruisseau à Pierre (Les Méchins)]] saved
38
Sleeping for 8.7 seconds, 2019-01-15 01:04:15
Page [[fr:Rivière des Roches (rivière Verte)]] saved
39
Sleeping for 8.8 seconds, 2019-01-15 01:04:25
Page [[fr:Rivière des Pointes]] saved
40
Sleeping for 8.7 seconds, 2019-01-15 01:04:35
Page [[fr:Rivière Porc-Pic]] saved
41
Sleeping for 8.8 seconds, 2019-01-15 01:04:45
Page [[fr:Rivière Tobégote]] saved
42
Sleeping for 8.7 seconds, 2019-01-15 01:04:55
Page [[fr:Petite rivière Cap-Chat Est]] saved
43
Sleeping for 8.9 seconds, 2019-01-15 01:05:04
Page [[fr:Rivière Towagodi]] saved
44
Sleeping for 8.6 seconds, 2019-01-15 01:05:15
45
Page [[fr:Rivière des Prairies (petite rivière Bleue)]] saved
import pywikibot
import requests
import json
import re

def query(request):
    request['action'] = 'query'
    request['format'] = 'json'
    request['utf8'] = 1
    lastContinue = {}
    while True:
        # Clone original request
        req = request.copy()
        # Modify it with the values returned in the 'continue' section of the last result.
        req.update(lastContinue)
        # Call API
        result = requests.get('https://fr.wikipedia.org/w/api.php', params=req).json()
        if 'error' in result:
            raise Error(result['error'])
        if 'warnings' in result:
            print(result['warnings'])
        if 'query' in result:
            yield result['query']
        if 'continue' not in result:
            break
        lastContinue = result['continue']

request = {
	"list": "linterrors",
	"utf8": 1,
	"lntcategories": "multiple-unclosed-formatting-tags|html5-misnesting",
	"lntlimit": "max",
	"lntnamespace": "2"
}
data = {}

for result in query(request):
    for one in result['linterrors']:
        titre = re.sub(r"Utilisat(rice|eur):", '', one['title'], 0, re.MULTILINE)
        titre = titre.split('/')[0]
        print(titre)
        if titre not in data:
            data[titre] = [{"user": titre, "param": one['params']['name'], "title": one['title'], "location": one['location'], "category": one['category']}]
        else:
            data[titre].append({"user": titre, "param": one['params']['name'], "title": one['title'], "location": one['location'], "category": one['category']})

for needToTalk in data:
    leserreurs = []
    for donnee in data[needToTalk]:
        site = pywikibot.Site('fr', 'wikipedia')
        page = pywikibot.Page(site, donnee['title'])
        textappro = page.text[donnee['location'][0]:donnee['location'][0]+200]
        if donnee ['category'] == "html5-misnesting":
            errorcategory = "balise mal incluse avec des rendus différents en HTML5 et HTML4"
        else:
            errorcategory = "balises de mise en forme non fermées"
        leserreurs.append("* '''Page concernée''' : [["+ donnee['title'] +"]] - '''Type d'erreur''' : "+ errorcategory +" - '''Balise problématique''' : <code><nowiki>"+ donnee['param'] +"</nowiki></code> - '''Position approximative en caractères''' : "+ str(donnee['location'][0]) +" - '''Texte autour de cette position''' : <code><nowiki>"+ textappro +"...</nowiki></code>")
    site = pywikibot.Site('fr', 'wikipedia')
    page = pywikibot.Page(site, 'Utilisateur:Tictacbot/Test')
    if page.canBeEdited():
        page.text += "\n{{subst:Utilisateur:Tictacbot/Erreur Lint|nombre="+ str(len(leserreurs)) +"|liste="+ "\n".join(leserreurs) +"}}"
        page.save(summary="[[wp:bot|robot]] : message pour de la maintenance en vue d'une future migration", botflag=False)
Ludó
Camulogene77
J. N. Squire
Yodaspirine
Yodaspirine
Yodaspirine
Yodaspirine
AM 23
Goelette Cardabela
STyx
Oliv0
Jeantantou
Pseudomoi
Ickx6
Ickx6
Indif
Angus Guilherme
Bayo
Égoïté 
Clio64
Clio64
AlmabotJunior
AlmabotJunior
AlmabotJunior
ZéroBot
ZéroBot
ZéroBot
Pic-Sou
~~DanWL60~~
Solarys
Derkleinebaueraufdemriesigenschachbrett
Sacha W
WeshMani
Pignoof
Pano38
Lev. Anthony
Ruyblas13
Ruyblas13
Ruyblas13
Carfois
Carfois
Carfois
Carfois
Carfois
Carfois
Carfois
Carfois
Carfois
Jules78120
Vatadoshu
Vatadoshu
Vatadoshu
Vatadoshu
Roy.nico
Roy.nico
Waran18
MAC
MAC
Dimonou
Hexasoft
Xic667
FredD
?renommé201302221015
Tibauty
Tibauty
Clio64
Friday83260
Friday83260
Maimonid
Belsach
Gerard-emile
PlexusSolaris
Guyferrer
Ekind
Ekind
Ekind
Ekind
CuriousReader
Sorgelus
Ambre Troizat
Ullens
Clapsus
Olivier1961
Score Beethoven
Steven De Oliveira
Rimael
Guérin Nicolas
Psychoslave
Winiew100
Cdecroix
Maimonid
Slimane El Ouadi
Slimane El Ouadi
Slimane El Ouadi
LaBaguette
Bymiallia
Solarys
Gateff
JhcbYIYVFO81673
Silbersod
Silbersod
Silbersod
PixelPastel
PixelPastel
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Jean-claude.chartrand
Rodrigo Elias Cardoso
Mat33470
PRA
PRA
Jérémy-Günther-Heinz Jähnick
Jérémy-Günther-Heinz Jähnick
PRA
Tinodela
Philippe Samyn
Philippe Samyn
Philippe Samyn
Philippe Samyn
Philippe Samyn
Lgd
Hexasoft
S0l0xal
S0l0xal
Ridha bekir
Shanul~frwiki
Shanul~frwiki
Libellule Bleue
Milord
Florian 09
Florian 09
Florian 09
Florian 09
Irønie
Rosevie
Gerbito
Gerbito
Shooke
Ralile
PlexusSolaris
PlexusSolaris
WikiDreamer
Solfeo957
Mardetanha
Sebastienplouvier
WikiDreamer Bot
Mandrak
Ystoystvo
JRibaX
Bruno Grégoire
XeroK
Sebletoulousain
Dudy001
Dudy001
Dudy001
Dudy001
Nclm
PlexusSolaris
Mozartman
Mozartman
Mozartman
Mozartman
Mozartman
Mozartman
Mozartman
Mozartman
Mozartman
Rob1bureau
Min Zuon
Nikola Bruxelles
PF-K
PF-K
Jitrixis
Jitrixis
Jitrixis
AnamaTannama
Anzhyo
Matthieu.Séverin-Beaumont
SleeplessCinderella
SleeplessCinderella
Nemesis 12
Jd
Tubezlob
Mandrak
Pablo31100
Salle
AURELXV3PRO
DonCamillo
Jean-Luc W
Jean-Luc W
Light Warrior
Asterix757
Score Beethoven
Mangatome
Tpa2067
Wfplb
Markadet
Markadet
Deep silence
Priper
Nicourse
PlexusSolaris
S0l0xal
S0l0xal
Udufruduhu
MDGx
Hégésippe Cormier
Hégésippe Cormier
Lazz06
Wikisoft*
Wikisoft*
Iluvalar
Averroist
Linback
Franky-Doo-Dy2
Franky-Doo-Dy2
JulNoc
Bruno Grégoire
Bruno Grégoire
Bruno Grégoire
Harryzilber
Olivier Baud
GhosterBot
GhosterBot
GhosterBot
GhosterBot
Regimminius
Regimminius
Dr Brains
Dr Brains
ACA Galaxy
Delhovlyn
Pols12
Bokken
Gratuitdu22
GhosterBot
GhosterBot
Delhovlyn
Ampon
Pradigue
B-wood KT
Moyg
Clem23
Le Kaptessa
Le Kaptessa
Le Kaptessa
Le Kaptessa
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Jules WMFr
Dr Brains
Hexasoft
Jose77
Terry.th83
Terry.th83
Terry.th83
Kolega2357
Laloès
Jules Gblv
لطرش أحمد الهاشمي
HanniBarca
Hégésippe Cormier
Hégésippe Cormier
Lachaume
SJ
Jimmy44
Jchouraqui
Lolo47
Amatmarion
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Philippe Dorthe
Africpost
Africpost
Africpost
Africpost
Africpost
Crowdlending
Jlschaff
Saadtest
Samuel2598
Samuel2598
Jean-Louis Lascoux
Colindla
Willscrlt
Amish28
پسر آمل
A Pirard
A Pirard
Al Maghi
Andreas Werle
Andreas Werle
Andreas Werle
Andreas Werle
Andreas Werle
Antaj7co
Aoineko
BelgoFoot
BenoitP
Benoit Rochon
Berdea
Brave2385
Brave2385
Brave2385
Bub's
Bub's
Captain Waters
Colindla
Comète Vagabonde
Editoarmandine
Editoarmandine
Erdemaslancan
Esmost
Esmost
Etiennekd
Etiennekd
Fefois 25
Florent Bezara
Ha98574
Hello123fase
Itai
Jean-Louis Lascoux
Jean gastronome
Jitrixis
Klymandre
LaGraphiste
Le Penta rose
Le galloudec
Libellule Bleue
Libellule Bleue
Libellule Bleue
Libellule Bleue
Libellule Bleue
Londrish
Lorenzo
Ludó
Marie-Candice
Marlo Jonesa
Narlou
Notafish
Norman zs
Nécropotame
Nécropotame
Nécropotame
Nécropotame
Nécropotame
Nyro Xeo
Oxxo
Oyunqi
Pkthib
PlexusSolaris
Polomad5
Polomad5
Pratyya Ghosh
Pratyya Ghosh
Pratyya Ghosh
Proz
Scarfi
Scarfi
Scarfi
SoLune
Souhila djezzar
Souhila djezzar
Souhila djezzar
Symac
TELEMAQUE1954
Thibaud 60
Thib Phil
Thine Antique Pen
TildeBot
Tiranious
Tiranious
TouN
Valombre
Wifaq temara
Willscrlt
Woozz
Woozz
Woozz
XeroK
Yodaspirine
Yug
Yug
Zargan~frwiki
Zine eddine n.
Louis Louvel
Pradigue
Ampon
Moyg
Clem23
Archipel
Thib Phil
Gerard-emile
Gerard-emile
Crijam
Agfline
Pierre5018
Dr Brains
SJ
Tartarinfox
Albergrin007
Lucastristan
Soboky
Cinephile1999
Buisson
Jdelalande
ConyJaro
Babskwal
Babskwal
Manchot sanguinaire
Ludo29
Xuensè
Nemoi
Mokarider
STyx
Jules78120
Nemoi
Freeyoni
Wikisoft*
Topf
Dom
Tinodela
LD
Castorepollux
Michelbailly
WSAddict
Libellule Bleue
Kuxu
Xavxav
Jules78120
Jules78120
Sorgelus
Saiidoussama
Zablo
Pixinet
Trex
ZéroBot
Tusco
Michelsimard
Archipel
Joris.deguet
Ravemiki
Ravemiki
Ravemiki
Ravemiki
Ravemiki
Ravemiki
Guillaume70
Ei2ko
Alexandre mosset
Sapindnoel
Lukasdesign
YanikB
Sg7438
Epok
Camillalx
Nicu farcas
Frachet
Gerard-emile
MaîtreSock
Pafinx
Hawk-Eye
Hawk-Eye
As de carreau
Hawk-Eye
Hawk-Eye
Gerard-emile
Silentomob
PagePerso
Ginko
Nicolas ANCEAU
GastelEtzwane
CLBanz
Jean-Louis Victor
Jean-Louis Victor
Libellule Bleue
Vjln.vjln
Michel Abada
Michel Abada
Assuropoil
Assuropoil
Assuropoil
Assuropoil
Assuropoil
Assuropoil
Franky-Doo-Dy2
Franky-Doo-Dy2
Franky-Doo-Dy2
Franky-Doo-Dy2
Franky-Doo-Dy2
MedvedLiska
Polaert
NicolasFilippi
Lesblok
As de carreau
Nemoi
Nemoi
81.65.189.203
Maxkirit
Fab13-09
Correctororthographix
Jules78120
Jules78120
Stefanos Stefanos
Polaert
Babskwal
HeartBeats
Edwinmagnier
Fourvin
Olivier d'ALLIVY KELLY
Olivier d'ALLIVY KELLY
Olivier d'ALLIVY KELLY
Olivier d'ALLIVY KELLY
Mathieu Bally
Caradryan
Hexasoft
Naloufan
Rodrigo Elias Cardoso
Tyseria
Algesiabe
Gwarcann
Gwarcann
Gwarcann
Gwarcann
Gwarcann
Gwarcann
Gwarcann
TwoWings
Ilyesagg
Merrheim~frwiki
Theoliane
Xavier Combelle
Xavier Combelle
Kuxu
Markus3
Elapied
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Fadafana
Microco
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
Jean Le Borgne
Kuxu
Accrochoc
Bayo
Liveteve
Bjankuloski06fr
Bjankuloski06fr
Barbe-Noire
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
LAT
Àlex
Ganapati
Bessie
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
Jules78120
TheVegaWarrior
BlueGinkgo
Libellule Bleue
Alfad
Marc BERTIER
Mikewazhere
BlueGinkgo
Odak
TiboQorl
Gfmorin
Super Poirot
Barbe-Noire
Jules78120
Jules78120
Esp2008~frwiki
Esp2008~frwiki
Esp2008~frwiki
Esp2008~frwiki
Esp2008~frwiki
Esp2008~frwiki
Reiner Stoppok
Reiner Stoppok
Smily
Vrahomarinaner
Carfois
Carfois
AwsrelianB
Lviatour
Chic
DocElisa
Un Fou
Un Fou
Tpa2067
Tpa2067
Tpa2067
Skaterskater12
Hégésippe Cormier
Rled44
Dr.mbl
Snipre
Frachet
Sg7438
Lexours
Ordifana75
Xic667
Patapiou
Gael13011
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Ip19216811
Benjozork
Benjozork
Jean-Louis Lascoux
Kalder
Kvardek du
Lucronde
Amanka
Humanologue
Humanologue
Wear flowers in your hair
Beoptylk
Myslenkovy
Naloufan91
Nlakim
Oy18
Mcsalo
Mcsalo
Alphos
Athena in Wonderland
Cantons-de-l'Est
LucasD
LucasD
LucasD
Marie Jeanne d'Aragon
Mélété
Vajrallan
Vajrallan
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
Kuxu
محمد بوعلام عصامي
محمد بوعلام عصامي
Anierin
Asclepias
Asclepias
Boism
Castorepollux
Castorepollux
Castorepollux
Castorepollux
Castorepollux
Castorepollux
Castorepollux
Grook Da Oger
Grook Da Oger
Jitrixis
Jules78120
Labberté K.J.
Neuromancien
P-e
Rinaldum
Sghaier mohamed
YanikB
YanikB
Yug
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Alencon
Arangardis
SmileAzeos
Hdetorcy
Hdetorcy
Ei2ko
Gécho
GashomyWiki95
P0503847
Wikifm71
Lachaume
Wiki ViewStats
Lou raspoutchou
Phil lahaye
Werdanf
Sofyanekasunet
Netcrawler
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
Nojhan
AuxNoisettes
Arturo63
Ludo29
Ludo29
Arcyon37
Yanes
Yanes
Yanes
Yanes
Yanes
Yanes
Yanes
Yanes
Yanes
Keriluamox
Jeantantou
Ruyblas13
Nicolas ANCEAU
Ruyblas13
Ruyblas13
Ruyblas13
Warp3
OD02fr
Leonard Fibonacci
Yodaspirine
Yodaspirine
Yodaspirine
Yodaspirine
GhosterBot
GhosterBot
GhosterBot
GhosterBot
GhosterBot
GhosterBot
GhosterBot
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
Claude villetaneuse
Wayne77
Ruyblas13
Ruyblas13
Ruyblas13
Ruyblas13
Ruyblas13
Ruyblas13
Antimuonium
Céach
Ruyblas13
Aaasoo
KalinGrizzly
Markus3
Markus3
Éclusette
Cyril5555
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Siren
Val8161
Val8161
Double Plus Ungood
Leag
GhosterBot
GhosterBot
Bayo
Bayo
Denvis1
Denvis1
Denvis1
Denvis1
Denvis1
Denvis1
Denvis1
Denvis1
Denvis1
Romary
Romary
Romary
Romary
Romary
Romary
Bayo
Bayo
Hdetorcy
Hdetorcy
Hdetorcy
Dr.mbl
AmHa
Tyseria
Tyseria
GhosterBot
GhosterBot
GhosterBot
AntonyB
AntonyB
GhosterBot
GhosterBot
J. N. Squire
The Supernaturel
Hexasoft
AlmabotJunior
Tiziouzou16
Epommate
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
DoniWolf
Gérard Zinsstag
Chat peint
Leonard Fibonacci
Irønie
MarineantoineL3
Tinodela
Pmpmpm
Llann Wé² 
MissDodo16798
Ellicrum
Chantier Naval Perrone
Jean-Jacques Puyoo
Ellicrum
Ellicrum
Ellicrum
Ellicrum
Ellicrum
ArnoDe4
Lionel sittler
Lionel sittler
Lionel sittler
Lionel sittler
Lionel sittler
Lionel sittler
GhosterBot
GhosterBot
Lachaume
Carfois
Pueblopassingby
Touriste
Pmpmpm
Noel.guillet
Warp3
Warp3
GhosterBot
GhosterBot
Petro
GhosterBot
GhosterBot
BeatrixBelibaste
GhosterBot
GhosterBot
GhosterBot
GhosterBot
Francoisrioux
BeatrixBelibaste
GhosterBot
GhosterBot
Hesan
Nadir.cherifi
Deuterium360
Nicolas ANCEAU
GhosterBot
GhosterBot
Yodaspirine
HarryStot
Addacat
Lomita
GhosterBot
GhosterBot
Leonard Fibonacci
Madelgarius
Meteniermyriam
GhosterBot
GhosterBot
GhosterBot
Dakeo
Salsero35
Ruyblas13
Meteniermyriam
GhosterBot
GhosterBot
Groupir !
LeLaisserPasserA38
Crijam
GhosterBot
Zolo
Racconish
GhosterBot
GhosterBot
GhosterBot
GhosterBot
Jerof37
Cbyd
GhosterBot
GhosterBot
GhosterBot
Renhour48
Ruyblas13
Ruyblas13
Ludó
Page [[fr:Utilisateur:Tictacbot/Test]] saved
Camulogene77
Sleeping for 9.5 seconds, 2018-05-04 22:40:22
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-107-722ddcc28d60> in <module>()
     60     print(data[needToTalk][0]['user'])
     61     page.text += "\n{{subst:Utilisateur:Tictacbot/Erreur Lint|nombre="+ str(len(leserreurs)) +"|liste="+ "\n".join(leserreurs) +"}}"
---> 62     page.save(summary="[[wp:bot|robot]] : message pour de la maintenance en vue d'une future migration", botflag=False)

/srv/paws/pwb/pywikibot/tools/__init__.py in wrapper(*__args, **__kw)
   1518                              cls, depth)
   1519                     del __kw[old_arg]
-> 1520             return obj(*__args, **__kw)
   1521 
   1522         if not __debug__:

/srv/paws/pwb/pywikibot/tools/__init__.py in wrapper(*__args, **__kw)
   1518                              cls, depth)
   1519                     del __kw[old_arg]
-> 1520             return obj(*__args, **__kw)
   1521 
   1522         if not __debug__:

/srv/paws/pwb/pywikibot/page.py in save(self, summary, watch, minor, botflag, force, asynchronous, callback, apply_cosmetic_changes, quiet, **kwargs)
   1262         self._save(summary=summary, watch=watch, minor=minor, botflag=botflag,
   1263                    asynchronous=asynchronous, callback=callback,
-> 1264                    cc=apply_cosmetic_changes, quiet=quiet, **kwargs)
   1265 
   1266     @allow_asynchronous

/srv/paws/pwb/pywikibot/page.py in wrapper(self, *args, **kwargs)
    134             pywikibot.async_request(handle, func, self, *args, **kwargs)
    135         else:
--> 136             handle(func, self, *args, **kwargs)
    137 
    138     manage_wrapping(wrapper, func)

/srv/paws/pwb/pywikibot/page.py in handle(func, self, *args, **kwargs)
    116         err = None
    117         try:
--> 118             func(self, *args, **kwargs)
    119         # TODO: other "expected" error types to catch?
    120         except pywikibot.Error as edit_err:

/srv/paws/pwb/pywikibot/page.py in _save(self, summary, watch, minor, botflag, cc, quiet, **kwargs)
   1273 
   1274         done = self.site.editpage(self, summary=summary, minor=minor,
-> 1275                                   watch=watch, bot=botflag, **kwargs)
   1276         if not done:
   1277             if not quiet:

/srv/paws/pwb/pywikibot/site.py in callee(self, *args, **kwargs)
   1310             else:
   1311                 raise Exception("Not implemented")
-> 1312             return fn(self, *args, **kwargs)
   1313 
   1314         if not __debug__:

/srv/paws/pwb/pywikibot/site.py in editpage(self, page, summary, minor, notminor, bot, recreate, createonly, nocreate, watch, **kwargs)
   5135             while True:
   5136                 try:
-> 5137                     result = req.submit()
   5138                     pywikibot.debug(u"editpage response: %s" % result,
   5139                                     _logger)

/srv/paws/pwb/pywikibot/data/api.py in submit(self)
   1919                 return simulate
   1920             if self.throttle:
-> 1921                 self.site.throttle(write=self.write)
   1922             else:
   1923                 pywikibot.log(

/srv/paws/pwb/pywikibot/throttle.py in __call__(self, requestsize, write)
    262             self.next_multiplicity = math.log(1 + requestsize) / math.log(2.0)
    263 
--> 264             self.wait(wait)
    265 
    266             if write:

/srv/paws/pwb/pywikibot/throttle.py in wait(self, seconds)
    241             pywikibot.log(message)
    242 
--> 243         time.sleep(seconds)
    244 
    245     def __call__(self, requestsize=1, write=False):

KeyboardInterrupt: 
#!/usr/bin/python3.6.5
#-*- coding: utf-8 -*-

import requests
import json

class bAPI():

    def __init__(self):
        self.session = requests.Session()
        self.config = {
            'username': 'Tictacbot@Tictacbot',
            'password': '6f3ii11k2soctc7lgsmuuum3ctfsd684'
        }

    def get_token(self, type_token):
        request = {
            "action": "query",
            "format": "json",
            "meta": "tokens",
            "type": type_token
        }
        
        for result in self.query(request):
            # Not clean, but do the job, only one yield.
            return result

    def login(self):
        print(self.get_token('login'))
        login_token = self.get_token('login')['query']['tokens']['logintoken']
        request = {
            "action": "login",
            "format": "json",
            "lgname": self.config['username'],
            "lgpassword": self.config['password'],
            "lgtoken": login_token
        }
        
        r = self.session.post('https://fr.wikipedia.org/w/api.php', data=request)
        result = r.json()

        if 'error' in result:
            raise Error(result['error'])
        if 'warnings' in result:
            print(result['warnings'])
        if 'login' in result:
            print('Authentification granted')
   
    def query(self, request):
        request['format'] = 'json'
        request['utf8'] = 1
        lastContinue = {}
        
        while True:
            # Clone original request
            req = request.copy()
            # Modify it with the values returned in the 'continue' section of the last result.
            req.update(lastContinue)
            # Call API
            result = self.session.get('https://fr.wikipedia.org/w/api.php', params=req).json()
            if 'error' in result:
                raise Error(result['error'])
            if 'warnings' in result:
                print(result['warnings'])
            if 'query' in result:
                yield result
            if 'continue' not in result:
                break
            lastContinue = result['continue']


bot = bAPI()
bot.login()
{'batchcomplete': '', 'query': {'tokens': {'logintoken': 'af9a611ea3091e5a0632afbcfd399ab35af100f5+\\'}}}
Authentification granted