<p>您可以使用<a href="http://sourceforge.net/projects/mysql-python/" rel="nofollow">MySQLdb</a>模块连接和修改SQL数据库,而不使用HTTP和cookies,但这通常是进行MediaWiki维护的错误解决方案。虽然只读访问不应该是个问题。在</p>
<p>使用脚本访问MediaWiki的最佳方法是使用<a href="http://www.mediawiki.org/wiki/API:Main_page" rel="nofollow">api.php</a>。在</p>
<p>最著名的基于Python的mediawikiapi机器人是<a href="http://www.mediawiki.org/wiki/Manual:Pywikibot" rel="nofollow">Pywikibot</a>(以前的<a href="http://pywikipediabot.sourceforge.net/" rel="nofollow">Pywikipediabot</a>)。在</p>
<p>在Python中保存cookies的最简单方法可能是使用<a href="http://docs.python.org/py3k/library/http.cookiejar.html" rel="nofollow">http.cookiejar</a>模块。
它的文档包含一些简单的示例。在</p>
<p>我从自己的MediaWiki机器人程序中提取了功能示例代码:</p>
<pre><code>#!/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))
</code></pre>
<p>类、错误处理和子函数已被删除,以提高可读性。在</p>
<p>o_url_opener中保存的cookie也可以用于对<a href="http://www.mediawiki.org/wiki/Manual:Parameters_to_index.php" rel="nofollow">index.php</a>的请求。在</p>
<p>您也可以通过索引.php(假装浏览器请求)但这将包括对HTML输出的解析。在</p>
<hr/>
<p>变量名图例:</p>
^{pr2}$