#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, wikipedia
import wikipedia, pagegenerators, catlib
import editarticle, time, os
import re, codecs, gc, threading
site = wikipedia.getSite()
def main():
# 서버에서 무한 반복으로 돌릴 때에는 아래를 사용:
# while 1<2:
# update([u"의견 요청"],u"틀:의견 요청 목록",u"이 문서는 봇에 의해 갱신되고 있습니다. [[분류:위키백과 틀|{{PAGENAME}}]]").start()
# gc.collect()
# time.sleep(300)
update([u"의견 요청"],u"틀:의견 요청 목록",u"이 문서는 봇에 의해 갱신되고 있습니다. [[분류:위키백과 틀|{{PAGENAME}}]]").start()
gc.collect()
class update(threading.Thread):
def __init__ ( self,templates,post_template,bottomtxt):
self.templates = templates
self.post_template = post_template
self.bottomtxt = bottomtxt
threading.Thread.__init__ ( self )
def run(self):
pages=[]
message=''
dic={}
templates = self.templates
bottomtxt ='%s' % self.bottomtxt
post_template = self.post_template
if len(templates)==1:
regex ='%s' % templates[0]
else:
regex='('
part=''
for template in templates:
regex+= part + template
part='|'
regex+=')'
for template in templates:
pagegen = pagegenerators.ReferringPageGenerator(wikipedia.Page(site, u'틀:%s' % template), onlyTemplateInclusion = True)
for page in pagegen:
pages.append(page)
pages = sorted(set(pages))
message =u''
if pages:
for page in pages:
Time,line = pageparse(page,regex)
dic[Time]=line
keys= dic.keys()
keys.sort(reverse=True)
for key in keys:
message +=u'%s' % dic[key]
else:
message = u'* 목록에 토론이 없습니다.'
pagetext= u"'''다음 토론들이 공동체 수준의 관심을 요청하고 있습니다. '''\n----\n<onlyinclude>%s\n</onlyinclude>\n%s" % (message,bottomtxt)
templatepage = wikipedia.Page(site,'%s' % post_template )
templatepage.put(pagetext, comment=u'수정, 현재 %s 개의 토론이 있습니다.' % len(pages))
wikipedia.output('Update, %s current discussions\n Sleeping for 5 minutes' % len(pages))
gc.collect()
def pageparse(page,regex):
wikipedia.output(page.title())
try:
message =''
text = page.get()
Time = time.time()
reason = ''
section = ''
dic = {}
g = re.search(u"문단(|\s)=.*?\!\!",text,re.I)
g = g.group(0).split('=')[1]
g = g.split('!')[0]
dic['section'] = g.strip()
g2 = re.search(u"사유(|\s)=.*?\!\!",text,re.I)
g2 = g2.group(0).split('=')[1]
g2 = g2.split('!')[0]
dic['reason'] = g2.strip()
g3 = re.search(u"시각(|\s)=.*?\}\}",text,re.I)
g3 = g3.group(0).split('=')[1]
g3 = g3.split('}')[0]
dic['time'] = g3.strip()
if dic.has_key('reason'):
reason = dic['reason']
if dic.has_key('time'):
Time = dic['time']
st = Time.split() # 2008년 1월 30일 (수) 23:01 (KST)
Time = st[0][:-1]+' '+st[1][:-1]+' '+st[2][:-1]+' '+st[4][:2]+' '+st[4][3:]
edittime = time.strptime(Time, u"%Y %m %d %H %M")
Time = time.mktime(edittime)
if dic.has_key('section'):
section = dic['section']
section = re.sub(' ','_',section)
section = re.sub('\[','',section)
section = re.sub('\]','',section)
link = u'\n* [[%s#%s|%s]] ' % (page.title(),section,page.title())
else:
link = u'\n* [[%s]] ' % page.title()
if Time < (time.time()- 2592000):
text = re.sub('\{\{'+regex+'(.*?)\}\}','',text)
page.put(text,comment= u'오래된 의견 요청 제거')
gc.collect()
return '',''
message =u'%s%s' % (link,reason)
message = re.sub('|','|',message)
gc.collect()
return Time, message
except:
text = page.get()
text = re.sub('\{\{'+regex+'(.*?)\}\}',u"{{의견 요청 오류}}",text)
page.put(text,u"의견 요청 오류")
gc.collect()
return '',''
if __name__ == '__main__':
try:
main()
finally:
wikipedia.stopme()