사용자:하늘/양식

< 사용자:하늘
하늘 (토론 | 기여)님의 2021년 11월 20일 (토) 14:18 판 (새 문서: <syntaxhighlight lang="python"> #CeruleanBot import requests import time class bot: def __init__(self): self.S = requests.Session() self.csrftoken = '' self.url = "https://lib...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
#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)