Вы можете подключиться и изменить базу данных SQL без HTTP и куки, используя модуль MySQLdb , но это часто неправильное решение для обслуживания MediaWiki.Хотя доступ только для чтения не должен быть проблемой.
Лучший способ получить доступ к MediaWiki с помощью сценария - использовать api.php .
Самый известныйОснованный на Python MediaWiki-API-бот - это Pywikibot (прежний Pywikipediabot ).
Самый простой способ сохранить куки в Python - это использовать http.cookiejar модуль.Его документация содержит несколько простых примеров.
Я извлек код функционального примера из своего собственного бота MediaWiki:
#!/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))
Классы, обработка ошибок и подфункции были удалены для повышения читабельности.
Файлы cookie, сохраненные в o_url_opener, также могут использоваться для запросов к index.php .
Вы также можете войти через index.php (подделать запрос браузера), но этобудет включать в себя разбор HTML-вывода.
легенда имени переменной:
# Unicode string
s_* = 'a'
# Bytes (raw string)
r_* = b'a'
# Dictionary
d_* = {'a':1}
# Integer number
i_* = 4711
# Other objects
o_* = SomeClass()