User:Sz-iwbot/DYKbot

#!/usr/bin/python
# -*- coding: utf-8  -*-
import datetime
from pywikibot import config
import pywikibot
import pywikibot.data.api


site = pywikibot.Site()

#获取新页面(实际是从最近更改获取的,暂时没有新页面的API)
pages = site.newpages(user=None, returndict=True,
                 start=pywikibot.Timestamp.utcnow(), end=pywikibot.Timestamp.utcnow()-datetime.timedelta(days=5), reverse=False, showBot=False,
                 showRedirects=False, excludeuser=None,
                 showPatrolled=None, namespaces=0, step=None, total=5000)
n=0
dyks=[]

for page in pages:
    #print page
    #p=pywikibot.Page(site, page[1][u'title'])
    #x= pywikibot.data.api.PropertyGenerator('info', titles=page[1][u'title'])
    title=page[1][u'title']
    #获取单个页面的大小数据
    for pageinfo in pywikibot.data.api.PropertyGenerator('info', titles=title):
        #个别情况下length key找不到,可能是API不稳定或者请求的时候页面被删除
        try:
            length = pageinfo[u'length']
            #超过3000字节大小的条目
            if length >3000:
                page2 =page[0]
                #print page2, page[1][u'newlen'], page[1][u'user'], title
                #print page2.toggleTalkPage()
                talkpage=page2.toggleTalkPage()
                username = page[1][u'user']
                date=page[1][u'timestamp']
                ndyk=u''
                #print page2.templates()
                #挂有条目消息框的页面不算
                if pywikibot.Page(site,u'Template:Ambox') in page2.templates():
                    pywikibot.output(u'Found in [[%s]](%s byte): "{{Ambox}}" in content, nothing necessary' % (title, length))
                #已经提名的条目
                elif pywikibot.Page(site,u'Template:DYK Invite') in talkpage.templates():
                    ndyk=u'{{NDYK|title='+title+u'|length='+str(length)+u'|user='+username+u'|date='+date+u'|flag=invite}}\n' 
                    pywikibot.output(u'Fond a DYK: [[%s]]. length is %s byte. Have invite.' % (title, length))
                    n = n+1
                #已经通过的条目
                elif pywikibot.Page(site,u'Template:DYKtalk') in talkpage.templates():
                    ndyk=u'{{NDYK|title='+title+u'|length='+str(length)+u'|user='+username+u'|date='+date+u'|flag=dyk}}\n'
                    pywikibot.output(u'Fond a DYK: [[%s]]. length is %s byte. Have invite have DYK.' % (title, length))
                    n = n+1
                #可能没有参考文献的条目
                elif (pywikibot.Page(site,u'模块:Citation/CS1') not in page2.templates()) and (pywikibot.Page(site,u'Template:Reflist') not in page2.templates()):
                    ndyk=u'{{NDYK|title='+title+u'|length='+str(length)+u'|user='+username+u'|date='+date+u'|ref=no}}\n' 
                    pywikibot.output(u'Fond a DYK: [[%s]]. length is %s byte. May no sources.' % (title, length))
                    n = n+1     
                else:
                    ndyk=u'{{NDYK|title='+title+u'|length='+str(length)+u'|user='+username+u'|date='+date+u'}}\n'
                    pywikibot.output(u'Fond a DYK: [[%s]]. length is %s byte' % (title, length))
                    n = n+1
                #print ndyk    
                dyks.append(ndyk)
        except:
            print 'ERROR' 
            
dykpage=pywikibot.Page(site,u'User:Sz-iwbot/DYK')
dykpagecontent=''.join(dyks)
h=u'最近5天创建的条目中共有%s个条目“可能”符合[[WP:DYKC|DYKC]]的条件。本列表最后更新于~~~~~\n' %str(n)
h=h+u'{|class="wikitable"\n!条目||长度||创建者||创建日期\n'
dykpagecontent=h+dykpagecontent
dykpage.put(dykpagecontent,u'BOT找到%s个条目' %str(n))