Utilisateur:Probot/ArticlesRecentsAuto
CODE OBSOLETE[modifier | modifier le code]
mais qui fonctionne quand même.. Voir la page de Probot pour une version plus récente et robuste basée sur le framework Pywikipedia. -- Dake@ 14 janvier 2007 à 02:04 (CET)
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Simplet Bot - le bot très basique pour Wikipedia
# Utilisateur:Dake - 2005
# (code sous license GPL)
import httplib
import urllib
import re
import sys
#####################################################
utilisateur = "UTILISATEUR"
motDePasse = "MOTDEPASSE"
pageSpeciale = "Special:Whatlinkshere&target=Modèle:Portail_informatique"
page = "Portail:Informatique/Articles récents"
#####################################################
# préparation URL
print "Connexion à fr.wikipedia.org"
conn = httplib.HTTPConnection('fr.wikipedia.org')
conn.request('GET', "/w/wiki.phtml?title=%s&limit=5000&offset=0&action=edit" % pageSpeciale)
print "Liste d'articles récupérées"
# connexion serveur et lecture
reponse = conn.getresponse()
article = reponse.read()
# expressions régulieres pour récuperer l'article
#<!-- start content -->
debut = re.search('<!-- start content -->', article).end()
fin = re.search('<!-- end content -->', article).start()
contenu = article[debut:fin]
debut = re.search('<ul>', contenu).end()
fin = re.search('</ul>\nV', contenu).start()
print contenu[debut:fin]
contenu = contenu[debut:fin].replace('</ul>', '')
contenu = contenu[debut:fin].replace('<ul>', '')
contenu = contenu[debut:fin].replace('(page de redirection)', '</li>')
articles = contenu[debut:fin].split('</li>')
# préparation liste d'articles récents
articleFinal = "<small>Liste mise à jour chaque heure par [[Utilisateur:%|%]] à partir des articles liés au bandeau {{M|Portail informatique}}</small>\n" % utilisateur
# lecture des 10 plus récents
for i in range(2, 17, 1):
debut = re.search('title=\"', articles[-i])
if debut is None:
continue
debut = debut.end()
fin = re.search('\">', articles[-i]).start()
if not "Utilisateur:" in articles[-i][debut:fin]:
articleFinal += "* [[" + urllib.unquote(articles[-i][debut:fin]) + "]]\n"
articleFinal += "<!-- Mis à jour automatiquement chaque heure par Utilisateur:%s à partir des articles liés au bandeau {{Informatique}}. Ne pas éditer -->" % utilisateur
# login
print articleFinal
print "Login"
parametres = urllib.urlencode({"wpName" : utilisateur,
"wpPassword" : motDePasse,
"wpLoginattempt" : "Identification",
"wpRemember" : "1"})
entetes = { "Content-type": "application/x-www-form-urlencoded",
"User-agent": "SimpletBot/1.0"}
conn = httplib.HTTPConnection('fr.wikipedia.org')
conn.request("POST", "/w/wiki.phtml?title=Special:Userlogin&action=submit", parametres, entetes);
reponse = conn.getresponse()
cookie = reponse.getheader("set-cookie")
print "Analyse de la réponse du serveur"
# analyse de la réponse (cookie)
cookieMatch = re.compile(': (.*?);')
cookieString = ""
for resultat in reponse.msg.getallmatchingheaders('set-cookie'):
m = cookieMatch.search(resultat)
if m:
cookieString += m.group(1) + "; "
cookieString = cookieString[:-2]
# lit la page à écrire
page = urllib.quote(page)
print "Lecture de la page " + page
entetes = { "Content-type": "application/x-www-form-urlencoded",
"User-agent": "SimpletBot/1.0",
"Cookie": cookie}
conn.request('GET', "/w/wiki.phtml?title=%s&action=edit" % page, {}, entetes)
reponse = conn.getresponse()
body = reponse.read()
# récupère les informations du temps d'édition et le jeton de session
pattern = re.compile(r'value="(\d+)" name=\"wpEdittime\"')
editTime = pattern.search(body).group(1)
pattern = re.compile(r'value="(\w+)" name=\"wpEditToken\"')
editToken = pattern.search(body).group(1)
# préparation des paramètres et sauvegarde de l'article
parametres = urllib.urlencode({"wpTextbox1" : articleFinal,
"wpEdittime" : editTime,
"wpMinoredit" : "1",
"wpWatchthis" : "0",
"wpEditToken" : editToken})
print "Ecriture de la page " + page
conn.request("POST", "/w/wiki.phtml?title=%s&action=submit" % page, parametres, entetes)
reponse = conn.getresponse()
# fermeture
conn.close()
print "Terminé"