MediaWiki自動登錄和更新頁面

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

相關文章
相關標籤/搜索