#CeruleanBot
import requests
import time
class bot:
def __init__(self):
self.S = requests.Session()
self.csrftoken = ''
self.url = "https://librewiki.net/api.php"
def get_csrftoken(self):
PARAMS = {"action": "query", "meta": "tokens", "format": "json"}
DATA = self.S.get(url=self.url, params=PARAMS).json()
self.csrftoken = DATA['query']['tokens']['csrftoken']
def login(self, name, password):
# Step 1: Retrieve login token first
PARAMS = {
'action': "query",
'meta': "tokens",
'type': "login",
'format': "json"
}
DATA = self.S.get(url=self.url, params=PARAMS).json()
LOGIN_TOKEN = DATA['query']['tokens']['logintoken']
# Step 2: Send a POST request to login. Using the main account for login is not
# supported. Obtain credentials via Special:BotPasswords
# 봇 비밀번호 설정 권장, 형식 : Caeruleum@asdfqwerzxcvpoiulkjhmnbv
PARAMS = {
"action": "login",
"format": "json",
"lgname": name,
"lgpassword": password,
"lgtoken": LOGIN_TOKEN,
"utf8": 1
}
DATA = self.S.post(self.url, data=PARAMS).json()
if DATA["login"]["result"] == "Success":
print("로그인 성공")
self.get_csrftoken()
else:
print("로그인 실패")
exit()
def logout(self):
DATA = self.S.post(self.url, data={"action": "logout",
"token": self.csrftoken, "format": "json"}).json()
print("로그아웃")
print(DATA)
def list_category(self, title, namespace):
PARAMS = {
"action": "query",
"format": "json",
"list": "categorymembers",
"utf8": 1,
"cmnamespace": namespace,
"cmtitle": title,
"cmprop": "title|timestamp",
"cmlimit": "max",
"cmsort": "timestamp",
}
DATA = self.S.get(url=self.url, params=PARAMS).json()
return DATA['query']['categorymembers']
def page_content(self, title):
PARAMS = {
"action": "query",
"format": "json",
"prop": "revisions",
"formatversion": "2",
"rvprop": "content",
"rvslots": "*",
"titles": title
}
DATA = self.S.get(url=self.url, params=PARAMS).json()
return DATA['query']['pages'][0]['revisions'][0]['slots']['main']['content']
def editpage(self, title, TEXT, summary):
PARAMS = {
"action": "edit",
"format": "json",
"title": title,
"text": TEXT,
"summary": summary,
"token": self.csrftoken,
"utf8": 1,
"formatversion": "latest",
"bot": "true"
}
DATA = self.S.post(url=self.url, data=PARAMS).json()
print(DATA)