사용자: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()