Utilisateur:Probot/ArticlesRecentsAuto

Une page de Wikipédia, l'encyclopédie libre.

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é"