用户:Sz-iwbot/autovfd.py

#!/usr/bin/python
# -*- coding: utf-8  -*-
"""
autovfd.py v1.00 by [[zh:user:Shizhao]]

license: GPL

"""
import os
import sys, time, datetime
import wikipedia, config,catlib
site=wikipedia.getSite()

def vfdm():
    """
    过期月份,应该提交删除
    """
    if int(time.strftime("%m",time.gmtime()))==1:
        vfdm=12
    else:
        vfdm=int(time.strftime("%m",time.gmtime()))-1
    vfdm=str(vfdm)
    return vfdm  


def templatetime(timestamp):
    """
    格式化页面放置模板的时间
    """
    t=time.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ')
    y=time.strftime("%Y",t)
    m=time.strftime("%m",t)
    d=time.strftime("%d",t)
    h=time.strftime("%H",t)
    min=time.strftime("%M",t)
    s=time.strftime("%S",t)
    temptime=datetime.datetime(int(y),int(m),int(d),int(h),int(min),int(s))	
    return temptime	

def vfd(category, templates):

#得到过期条目列表


    """
    得到某个分类下没有提交删除的条目,根据设置一个测试页面的链入,判断是否已经提交删除
    """
    n=0
    vfdlist=[]
    cat=catlib.Category(site, category)
    listOfArticles = cat.articlesList()

    test=wikipedia.Page(site,u'User:Sz-iwbot/vfdall')

    pagelist = [page for page in listOfArticles if page.namespace()==0 and test not in page.getReferences()]

    for page in pagelist:

        temptime = None
#查找加上模板的日期, 并将过期的条目写入列表 

        notime=True
        for (id, timestamp, user, content) in page.fullVersionHistory():
        
            for template in templates:
                if template in (id, timestamp, user, content)[3] and datetime.datetime.utcnow() - templatetime(timestamp) > datetime.timedelta(days=30) and notime:
                    wikipedia.output(u'In [[%s]] Fond [[%s]], submit VFD' % (category, page.title()))
                    title=page.title()
                    title=u'\n==== [['+title+u']] ====\n'
                    vfdlist.append(page.title())
                    n=n+1
                    notime=False
#        wikipedia.output(u'[[%s]] Not more 30 days, KEEP' % ( page.title()))

    wikipedia.output(u'In [[%s]] Fond vfd totlal: %s' % (category, n))
    return vfdlist


def submitvfd(vfdlist,reson):
    """
	提交删除
    """
    todayvfd=u'Wikipedia:删除投票和请求/%s%s%s日' % (datetime.datetime.utcnow().year, datetime.datetime.utcnow().month, datetime.datetime.utcnow().day)
#    todayvfd=u'User:Shizhao/3'
    botc=u'Bot提交过期%s条目' % reson 
    vfdpage=wikipedia.Page(site,todayvfd)
    svfdlist=''.join(vfdlist) 
    if vfdpage.exists():
        text=vfdpage.get()
        text=text+u'\n=== 过期'+reson+u'条目 ===\n'+svfdlist+u'----\n超过30天仍然挂有{{tl|'+reson+u'}}模板的条目,由[[WP:BOT|]]自动提交。—~~~~'
        vfdpage.put(text, botc,  minorEdit=False )
    else:
        hear=u'{{subst:DRHead}}'
        text=hear+u'\n=== 过期'+reson+u'条目 ===\n'+svfdlist+u'----\n超过30天仍然挂有{{tl|'+reson+u'}}模板的条目,由[[WP:BOT|]]自动提交。—~~~~'
        vfdpage.put(text, botc+u'并建立删除请求页面', minorEdit=False )
    wikipedia.output(u'submit pages to VFD page: [[%s]] ' % todayvfd)

def vfdnotice(vfdlist, pagereson):
    """
    在提交删除的条目上挂删除模板
    """
    for title in vfdlist:
        page=wikipedia.Page(site,title)
        t=page.get()
        reson=u'{{Vfd|过期%s}}\n'% pagereson
        t=reson+t
        page.put(t, pagereson, minorEdit=True)	
        wikipedia.output(pagereson + u':Bot提交删除')

def sleep(s):
    wikipedia.output(u'\nSleeping %s s' % s)	
    time.sleep(s)    
	
def substub():
    """
    过期小小作品提交删除
    """
    category=u'Category:%s月小小作品' % vfdm()
    templates=['{{Substub', '{{小小作品', '{{substub']
    reson=u'小小作品'

    vfdlist=vfd(category, templates)
    if len(vfdlist) >0:
        vfdnotice(vfdlist, reson)
        submitvfd(vfdlist,reson)
    else:
        wikipedia.output(u'Today Not Vfd!')
    sleep(60)


def Notability():
    """
    过期主题知名度不足条目
    """
    category=u'Category:%s月主題知名度不足的條目' % vfdm()
    templates=['{{知名度', '{{知名度不足', '{{fame', '{{Fame', '{{Notability', '{{notability']
    reson=u'知名度不足'

    vfdlist=vfd(category, templates)
    if len(vfdlist) >0:
        vfdnotice(vfdlist, reson)
        submitvfd(vfdlist,reson)
    else:
        wikipedia.output(u':Today Not Vfd!')
    sleep(60)

def Importance():
    """
    过期重要性不足条目
    """
    category=u'Category:%s月重要性不明的條目' % vfdm()
    templates=['{{Importance', '{{importance', '{{重要性']
    reson=u'重要性不足'

    vfdlist=vfd(category, templates)
    if len(vfdlist) >0:
        vfdnotice(vfdlist, reson)
        submitvfd(vfdlist,reson)
    else:
        wikipedia.output(u':Today Not Vfd!')
    sleep(60)

substub()
Notability()
Importance()
wikipedia.stopme()