Vous pouvez vous connecter et modifier la base de données SQL sans HTTP ni cookies en utilisant le module MySQLdb, mais c'est souvent la mauvaise solution pour effectuer la maintenance de MediaWiki. Bien que l'accès en lecture seule ne devrait pas poser de problème. La meilleure façon d'accéder à MediaWiki avec un script est d'utiliser api.php.
Le MediaWiki-API-bot basé sur Python le plus connu est le Pywikibot (anciennement Pywikipediabot).
La méthode la plus simple pour enregistrer des cookies en Python pourrait être d'utiliser le module http.cookiejar. Sa documentation contient quelques exemples simples.
I extrait exemple de code fonctionnel de mon propre MediaWiki-bot:
#!/usr/bin/python3
import http.cookiejar
import urllib.request
import urllib.parse
import json
s_login_name = 'example'
s_login_password = 'secret'
s_api_url = 'http://en.wikipedia.org/w/api.php'
s_user_agent = 'StackOverflowExample/0.0.1.2012.09.26.1'
def api_request(d_post_params):
d_post_params['format'] = 'json'
r_post_params = urllib.parse.urlencode(d_post_params).encode('utf-8')
o_url_request = urllib.request.Request(s_api_url, r_post_params)
o_url_request.add_header('User-Agent', s_user_agent)
o_http_response = o_url_opener.open(o_url_request)
s_reply = o_http_response.read().decode('utf-8')
d_reply = json.loads(s_reply)
return (o_http_response.code, d_reply)
o_cookie_jar = http.cookiejar.CookieJar()
o_http_cookie_processor = urllib.request.HTTPCookieProcessor(o_cookie_jar)
o_url_opener = urllib.request.build_opener(o_http_cookie_processor)
d_post_params = {'action': 'login', 'lgname': s_login_name}
i_code, d_reply = api_request(d_post_params)
print('http code: %d' % (i_code))
print('api reply: %s' % (d_reply))
s_login_token = d_reply['login']['token']
d_post_params = {
'action': 'login',
'lgname': s_login_name,
'lgpassword': s_login_password,
'lgtoken':s_login_token
}
i_code, d_reply = api_request(d_post_params)
print('http code: %d' % (i_code))
print('api reply: %s' % (d_reply))
Classes, gestion des erreurs et des sous-fonctions ont été supprimées pour augmenter la lisibilité.
Les cookies enregistrés dans o_url_opener peuvent également être utilisés pour les demandes index.php.
Vous pouvez également vous connecter via index.php (fausse une demande de navigateur) mais cela inclurait l'analyse de la sortie HTML.
légende Nom de la variable:
# Unicode string
s_* = 'a'
# Bytes (raw string)
r_* = b'a'
# Dictionary
d_* = {'a':1}
# Integer number
i_* = 4711
# Other objects
o_* = SomeClass()
Vérifiez cela: http://stackoverflow.com/questions/2170990/how-to-check-if-a-user-is-logged-on-in-mediawiki-in-a-different-app –
Merci, C'est très pertinent. – HoverHell
Quel problème voulez-vous résoudre avec votre script? – phobie