Mediawiki系統開放了API,向wiki系統的api.php發送http請求,可實現不少功能。php
1.登錄:原理可查看mediawiki api文檔node
# Loginapi
userName = '***'cookie
password = '***'app
headers = dict()dom
headers['Content-Type'] = 'application/x-www-form-urlencoded'url
headers['Connection'] = 'Keep-Alive'code
params = dict()orm
params['action'] = 'login'xml
params['format'] = 'xml'
params['lgname'] = userName
params['lgpassword'] = password
response, content = http.request(LOGIN_URL, method='POST', body=urllib.urlencode(params), headers=headers)
cookie = response.get('set-cookie')
xmldoc = xml.dom.minidom.parseString(content)
token = xmldoc.getElementsByTagName('login')[0].getAttribute('token')
headers['Cookie'] = cookie
params['lgtoken'] = token
response, content = http.request(LOGIN_URL, method='POST', body=urllib.urlencode(params), headers=headers)
xmldoc = xml.dom.minidom.parseString(content)
node = xmldoc.getElementsByTagName('login')[0]
status = node.getAttribute('result')
if status != 'Success':
print "Login Not success..."
exit()
print "Success Login..."
token = node.getAttribute('lgtoken')
userId = node.getAttribute('lguserid')
userName = urllib.quote(userName)
cookiePrefix = node.getAttribute('cookieprefix')
# Construct request headers
cookies = list()
cookies.append(cookie)
cookies.append(cookiePrefix + 'UserName=' + userName)
cookies.append(cookiePrefix + 'UserId=' + userId)
cookies.append(cookiePrefix + 'Token=' + token)
headers['Cookie'] = '; '.join(cookies)
而後使用這個包含登陸成功後返回的Cookies的Header請求其餘頁面,就被認爲是已登陸的
2.編輯:原理也可參見mediawiki api文檔,就是先獲取edittoken,而後發送請求編輯
page = chineseEncode('首頁')
#response, content = http.request('http://****/mediawiki/api.php?format=xml&action=query&titles=%s&prop=revisions&rvprop=content' % (page), method='GET')
response, content = http.request('http://****/mediawiki/api.php?format=xml&action=query&titles=%s&prop=info|revisions&intoken=edit' % (page), method='GET', headers=headers)
match = re.search(r'edittoken="(\w+\+\\)"', content)
if match:
editToken = match.group(1)
print "editToken is %s" % (editToken)
params = {}
params['format'] = 'xml'
params['action'] = 'edit'
params['title'] = 'newPage'
params['summary'] = 'This is a test summary.'
params['text'] = 'This is my edit text content.'
params['token'] = editToken
response, content = http.request('http://****/mediawiki/api.php', method='POST', body=urllib.urlencode(params), headers=headers)
// 查看content內容,發現裏面包含success,編輯成功,查看頁面,確實內容改變了
print content