사용자:Kwj2772/BotScript
이 사용자가 사용하는 봇의 스크립트입니다. 출처:사용자:티첼/RFC.py, 사용자:풀빵/스크립트작업실/replace-project.py
#-*- encoding: utf-8 -*-
import time
import re
import wikipedia, catlib
wp = wikipedia.getSite()
co = wikipedia.getSite("commons", "commons")
def get_head_tail(page):
# 데이터가 있는 문서는 다음과 같은 구조로 되어있다고 가정한다.
#
# {{#switch: ...
# |1=첫번째
# |2=두번째
# ...
# |
# }}
# 나머지부분
#
# 여기에서 첫부분 |1=, 마지막부분 |을 잘라서 사용. 나머지는 머리 꼬리
content = page.get()
head = content.split("|1=",1)[0]
tail = content.split("|\n", 1)[1]
return head, tail
def pack_page(page, items):
head, tail = get_head_tail(page)
body = u""
i = 1 # :(
for item in items:
body += u"|%d=%s\n"%(i, item)
i += 1
body += u"|\n"
data = head + body + tail
page.put(data, u"robot: 자동 갱신")
def normalize(text):
u"""commons 설명 문서를 ko에 맞도록 변환한다.
* [[일반링크]] -> [[commons:일반링크]]"""
def func(m):
g = m.group(1)
if g[0]==':': g = g[1:]
a,b,c = g.partition(':')
if b and (len(a)<=2 or a.lower()=='image'):
g = ':'+g
else:
g = 'commons:'+g
return "[["+g+"]]"
return re.sub(r"\[\[(.+?)\]\]", func, text)
def main():
lang = u'ko'
lang_fallback = u'en'
potd = u"Template:Potd/%d-%.2d-%.2d"
potd_desc = u"Template:Potd/%d-%.2d-%.2d (%s)" # YYYY-MM-DD (ko)
year, month = time.localtime()[:2] # time.gmtime() to use GMT
img_page = wikipedia.Page(wp, u"틀:오늘의 그림")
desc_page = wikipedia.Page(wp, u"틀:오늘의 그림/설명")
img_list = []
desc_list = []
for i in range(1, 32):
try:
img = wikipedia.Page(co, potd%(year, month, i)).get()
img = img.split('<noinclude>', 1)[0] # XXX
except wikipedia.NoPage:
break
desc = None
try:
desc = wikipedia.Page(co, potd_desc%(year, month, i, lang)).get()
except wikipedia.NoPage:
desc = wikipedia.Page(co, potd_desc%(year, month, i, lang_fallback)).get()
desc = desc.split('<noinclude>', 1)[0] # XXX DUP
desc = normalize(desc)
print (u"%d: %s"%(i, img)).encode('ascii', 'replace')
img_list.append(img)
desc_list.append(desc)
pack_page(img_page, img_list)
pack_page(desc_page, desc_list)
return True
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()