편집 전 과거 문서의 위키텍스트 (old_wikitext) | '<syntaxhighlight lang="python">
import requests
import datetime
import os
import sys
import re
import time
S = requests.Session()
URL = "https://librewiki.net/api.php"
class csrftoken:
def get():
PARAMS = {
"action": "query",
"meta": "tokens",
"format": "json"
}
DATA = S.get(url=URL, params=PARAMS).json()
return DATA['query']['tokens']['csrftoken']
def download(url, file_name):
print(url, file_name)
os.system("wget "+url+" --directory-prefix='" + file_name + "' -nc -q")
#os.system('clear')
#OS = platform.system()
def api_download(prefix, hanja, var):
time.sleep(1)
PARAMS = {
"action": "query",
"format": "json",
"prop": "imageinfo",
"titles": 'file:'+hanja+'-'+var,
"utf8": 1,
"formatversion": "latest",
"iiprop": "url"
}
DATA = S.get(url="https://commons.wikimedia.org/w/api.php",
params=PARAMS).json()
if 'missing' in DATA['query']['pages'][0]:
print(hanja+'-'+var+' missing')
else:
download(DATA['query']['pages'][0]['imageinfo']
[0]['url'], prefix + '/')
print('downloaded '+hanja+'-'+var)
def api_upload(prefix, hanja, var):
#os.system('clear')
if os.path.isfile(prefix + '/' + hanja+'-'+var) == True:
uploadPARAMS = {
"action": "upload",
"filename": hanja+'-'+var,
"format": "json",
"text": "== 파일의 설명 ==\n{{파일 정보\n|설명 = \n|출처 = Wikimedia commons\n|날짜 = \n|만든이 = \n|기타 = \n}}\n== 라이선스 ==\n{{CC-BY-SA-3.0}}\n[[분류:한자/문자/획순/"+var+"]]",
"async": 1,
"token": CSRF_TOKEN,
"ignorewarnings": 1
}
FILE = {'file': (hanja+'-'+var, open(prefix + '/' + hanja+'-'+var,
'rb'), 'multipart/form-data')}
DATA = S.post(URL, files=FILE, data=uploadPARAMS).json()
print(DATA)
else:
print("파일 없음")
return
def login(name, password):
# Step 1: Retrieve login token first
PARAMS = {
'action': "query",
'meta': "tokens",
'type': "login",
'format': "json"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.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 = S.post(URL, data=PARAMS).json()
if DATA["login"]["result"] == "Success":
print("로그인 성공")
else:
print("로그인 실패")
exit()
def logout(CSRF_TOKEN):
DATA = S.post(URL, data={"action": "logout",
"token": CSRF_TOKEN, "format": "json"}).json()
print("로그아웃")
print(DATA)
login("Caeruleum", "Caeruleum@*********************************")
fontType = '명조'
currentDate = str(datetime.datetime.now())
currentDate = currentDate.split('.')[0]
temp = open('date.txt', 'r')
preDate = temp.readline().replace('-', ':')
temp.close()
print(preDate)
date_file = open('date.txt', 'w')
date_file.write(currentDate)
date_file.close()
if not(os.path.isdir(currentDate)):
os.makedirs(os.path.join(currentDate))
PARAMS = {
"action": "query",
"format": "json",
"list": "categorymembers",
"utf8": 1,
"cmnamespace": "1600",
"cmtitle": "분류:한자/문자",
"cmprop": "title|timestamp",
"cmtype": "page",
"cmlimit": "max",
"cmsort": "timestamp",
"cmstart": preDate
}
DATA = S.get(url=URL, params=PARAMS).json()
PAGES = DATA['query']['categorymembers']
hanjaList = open(currentDate + '/list.csv', 'a')
for page in PAGES:
hanja = page['title'].split('/')[1] + '\n'
hanjaList.write(hanja)
hanjaList.close()
hanjaList = open(currentDate + '/list.csv', 'r')
CSRF_TOKEN = csrftoken.get()
while True:
hanja = hanjaList.readline().replace('\n', '')
if not hanja:
break
PARAMS = {
"action": "query",
"format": "json",
"prop": "revisions",
"formatversion": "2",
"rvprop": "content",
"rvslots": "*"
}
PARAMS["titles"] = '시리즈:리브레 한자사전/' + hanja
DATA = S.get(url=URL, params=PARAMS).json()
PAGE = DATA['query']['pages'][0]['revisions'][0]['slots']['main']['content']
hanja = re.search('한자 =(.+?)\n', PAGE).group(1).strip()
print('------------------')
print(hanja)
japanHanja = re.search('신자체 =(.+?)\n', PAGE)
chineseHanja = re.search('간체자 =(.+?)\n', PAGE)
if japanHanja == None:
japanHanja = hanja
else:
japanHanja = japanHanja.group(1).strip()
if japanHanja == "":
japanHanja = hanja
api_download(currentDate, hanja, 'bw.png')
api_download(currentDate, hanja, 'order.gif')
api_download(currentDate, japanHanja, 'jorder.gif')
api_download(currentDate, japanHanja, 'jbw.png')
if chineseHanja != None:
chineseHanja = chineseHanja.group(1).strip()
if chineseHanja != "":
api_download(currentDate, chineseHanja, 'order.gif')
api_download(currentDate, chineseHanja, 'bw.png')
api_upload(currentDate, chineseHanja, 'order.gif')
api_upload(currentDate, chineseHanja, 'bw.png')
api_upload(currentDate, hanja, 'order.gif')
api_upload(currentDate, hanja, 'bw.png')
api_upload(currentDate, japanHanja, 'jorder.gif')
api_upload(currentDate, japanHanja, 'jbw.png')
time.sleep(3)
logout(CSRF_TOKEN)
</syntaxhighlight>' |
편집 전후의 차이 (edit_diff) | '@@ -1,203 +1,1 @@
-<syntaxhighlight lang="python">
-import requests
-import datetime
-import os
-import sys
-import re
-import time
-
-S = requests.Session()
-URL = "https://librewiki.net/api.php"
-
-
-class csrftoken:
- def get():
- PARAMS = {
- "action": "query",
- "meta": "tokens",
- "format": "json"
- }
- DATA = S.get(url=URL, params=PARAMS).json()
- return DATA['query']['tokens']['csrftoken']
-
-
-def download(url, file_name):
- print(url, file_name)
- os.system("wget "+url+" --directory-prefix='" + file_name + "' -nc -q")
- #os.system('clear')
-
-#OS = platform.system()
-
-
-def api_download(prefix, hanja, var):
- time.sleep(1)
- PARAMS = {
- "action": "query",
- "format": "json",
- "prop": "imageinfo",
- "titles": 'file:'+hanja+'-'+var,
- "utf8": 1,
- "formatversion": "latest",
- "iiprop": "url"
- }
-
- DATA = S.get(url="https://commons.wikimedia.org/w/api.php",
- params=PARAMS).json()
- if 'missing' in DATA['query']['pages'][0]:
- print(hanja+'-'+var+' missing')
- else:
- download(DATA['query']['pages'][0]['imageinfo']
- [0]['url'], prefix + '/')
- print('downloaded '+hanja+'-'+var)
-
-
-def api_upload(prefix, hanja, var):
- #os.system('clear')
- if os.path.isfile(prefix + '/' + hanja+'-'+var) == True:
- uploadPARAMS = {
- "action": "upload",
- "filename": hanja+'-'+var,
- "format": "json",
- "text": "== 파일의 설명 ==\n{{파일 정보\n|설명 = \n|출처 = Wikimedia commons\n|날짜 = \n|만든이 = \n|기타 = \n}}\n== 라이선스 ==\n{{CC-BY-SA-3.0}}\n[[분류:한자/문자/획순/"+var+"]]",
- "async": 1,
- "token": CSRF_TOKEN,
- "ignorewarnings": 1
- }
- FILE = {'file': (hanja+'-'+var, open(prefix + '/' + hanja+'-'+var,
- 'rb'), 'multipart/form-data')}
- DATA = S.post(URL, files=FILE, data=uploadPARAMS).json()
- print(DATA)
- else:
- print("파일 없음")
- return
-
-
-def login(name, password):
- # Step 1: Retrieve login token first
- PARAMS = {
- 'action': "query",
- 'meta': "tokens",
- 'type': "login",
- 'format': "json"
- }
- R = S.get(url=URL, params=PARAMS)
- DATA = R.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 = S.post(URL, data=PARAMS).json()
- if DATA["login"]["result"] == "Success":
- print("로그인 성공")
- else:
- print("로그인 실패")
- exit()
-
-
-def logout(CSRF_TOKEN):
- DATA = S.post(URL, data={"action": "logout",
- "token": CSRF_TOKEN, "format": "json"}).json()
- print("로그아웃")
- print(DATA)
-
-
-login("Caeruleum", "Caeruleum@*********************************")
-
-fontType = '명조'
-
-currentDate = str(datetime.datetime.now())
-currentDate = currentDate.split('.')[0]
-
-temp = open('date.txt', 'r')
-preDate = temp.readline().replace('-', ':')
-temp.close()
-print(preDate)
-date_file = open('date.txt', 'w')
-date_file.write(currentDate)
-date_file.close()
-
-if not(os.path.isdir(currentDate)):
- os.makedirs(os.path.join(currentDate))
-
-PARAMS = {
- "action": "query",
- "format": "json",
- "list": "categorymembers",
- "utf8": 1,
- "cmnamespace": "1600",
- "cmtitle": "분류:한자/문자",
- "cmprop": "title|timestamp",
- "cmtype": "page",
- "cmlimit": "max",
- "cmsort": "timestamp",
- "cmstart": preDate
-}
-DATA = S.get(url=URL, params=PARAMS).json()
-PAGES = DATA['query']['categorymembers']
-
-hanjaList = open(currentDate + '/list.csv', 'a')
-for page in PAGES:
- hanja = page['title'].split('/')[1] + '\n'
- hanjaList.write(hanja)
-hanjaList.close()
-hanjaList = open(currentDate + '/list.csv', 'r')
-
-CSRF_TOKEN = csrftoken.get()
-
-while True:
- hanja = hanjaList.readline().replace('\n', '')
- if not hanja:
- break
-
- PARAMS = {
- "action": "query",
- "format": "json",
- "prop": "revisions",
- "formatversion": "2",
- "rvprop": "content",
- "rvslots": "*"
- }
- PARAMS["titles"] = '시리즈:리브레 한자사전/' + hanja
- DATA = S.get(url=URL, params=PARAMS).json()
- PAGE = DATA['query']['pages'][0]['revisions'][0]['slots']['main']['content']
- hanja = re.search('한자 =(.+?)\n', PAGE).group(1).strip()
- print('------------------')
- print(hanja)
- japanHanja = re.search('신자체 =(.+?)\n', PAGE)
- chineseHanja = re.search('간체자 =(.+?)\n', PAGE)
- if japanHanja == None:
- japanHanja = hanja
- else:
- japanHanja = japanHanja.group(1).strip()
- if japanHanja == "":
- japanHanja = hanja
-
- api_download(currentDate, hanja, 'bw.png')
- api_download(currentDate, hanja, 'order.gif')
- api_download(currentDate, japanHanja, 'jorder.gif')
- api_download(currentDate, japanHanja, 'jbw.png')
-
- if chineseHanja != None:
- chineseHanja = chineseHanja.group(1).strip()
- if chineseHanja != "":
- api_download(currentDate, chineseHanja, 'order.gif')
- api_download(currentDate, chineseHanja, 'bw.png')
- api_upload(currentDate, chineseHanja, 'order.gif')
- api_upload(currentDate, chineseHanja, 'bw.png')
- api_upload(currentDate, hanja, 'order.gif')
- api_upload(currentDate, hanja, 'bw.png')
- api_upload(currentDate, japanHanja, 'jorder.gif')
- api_upload(currentDate, japanHanja, 'jbw.png')
- time.sleep(3)
-
-logout(CSRF_TOKEN)
-</syntaxhighlight>
+{{삭제|}}
' |