用户:Caesar Schinas/pwb/cg_related.py
#!/ usr/bin/python #-*-编码:utf-8-*- #版权所有©2009 Caesar Schinas。 #根据CC-by-nc-sa-3.0许可证发布( http://creativecommons.org/licenses/by-nc-sa/3.0/ ). #可在以下条件下进行分发和修改: #(by)在所有发行版和衍生产品中,必须将其归属于Caesar Schinas。 #(nc)除非事先获得Caesar Schinas的书面许可,否则禁止商业使用。 #(sa)衍生作品必须在相同的许可证和条件下发布。 """ 这个机器人程序会自动为那些没有相关文章的文章创建“相关文章”子页面 它们基于Special:WhatLinksHere。 支持以下参数: -从这一点开始按字母顺序检查文章, 而不是从头开始。 -创建相关文章之前不要每次都问 子页面; 无论如何,只要创建它。 -debug实际上不创建任何“相关文章”子页面; 只是 显示将创建的内容。 """ __版本__=“$Id:cg_related.py 0 2009-06-30 10:23:00 caesarsgrunt$” 导入维基百科 导入页面生成器 类RelatedArticlesBot: #编辑摘要 消息={ 'en':u'机器人测试编辑:开始相关文章子页。 请检查并刷洗。 有关上下文,请参阅[[:Category:Bot-created Related Articles subpages | here]]。', } 定义__init__(自我、生成器、调试,始终): """ 建造师。 参数: *生成器-确定哪些页面上的页面生成器 继续工作。 *debug-如果为True,则不进行任何实际更改,但仅显示 本来会改变的。 """ self.generator=发电机 self.debug=调试 self.always=始终 self.prev=无 定义运行(自身): #设置编辑摘要消息 wikipedia.setAction(维基百科.translate(wikipedia.getSite(),self.msg)) 对于self.generator中的页面: 自检(第页) def检查(self,page): title=页面.title() 如果是self-prev: 如果page.title().split('/')[0]==page.title(): #已到达新的顶级页面,未找到前一个页面的“相关文章”子页面。 #检查是否确实没有相关文章子页面。。。 如果是维基百科。 页面(wikipedia.getSite(),self.prev.title()+“/Related_Articles”).exists()==False: wikipedia.output(u“\03{lightred}%s没有相关文章子页\03{default}”%self.prev.aslink()) if self.prev.title().endswith(“(消除歧义)”): #当前的顶级页面是一个消除歧义页面。 wikipedia.output(u“\03{lightgreen}%s是消歧页\03{default}”%page.title()) self.prev=无 返回 self.create(self.prev) self.prev=无 返回 elif page.title()==self.prev.title()+'/相关文章': #当前顶级页面已经有一个“相关文章”页面。 wikipedia.output(u“\03{lightgreen}%s已经存在\03{default}”%page.title()) self.prev=无 返回 elif page.title().count('/')!= 0 : #页面是子页面,但不是相关文章 wikipedia.output(u“%s”%page.title()) 返回 其他: self.prev=无 返回 elif page.title().count('/')!= 0 : #页面是一个子页面,但没有父页面。 忽略。 wikipedia.output(u“\n跳过%s(独立子页面)”%page.aslink()) 返回 #elif维基百科。 页面(wikipedia.getSite(),“模板:”+Page.title()+“/Metadata”).exists()==False: #wikipedia.output(u“\n跳过%s(没有元数据的页面)”%page.aslink()) #返回 其他: #Prev没有设置,因为我们已经处理过了,或者因为这是第一页。 wikipedia.output(u“\n\n>>\03{lightpurple}%s\03{default}<<”%page.title()) self.prev=第页 返回 def创建(self,rootpage): wikipedia.output(u“查找相关文章…”) 相关=[] 对于rootpage.getReferences()中的页面: 如果page.namespace()==0: title=page.title().split('/')[0] 如果title==rootpage.title(): 持续 如果不是page.exists(): 持续 如果page.isRedirectPage(): 持续 相关的.append({{r|'+title+'}}') #如果没有链接,我们显然无法创建相关文章子页面。 如果长度(相关)==0: 返回 related=“\n”.join(排序(集合(相关))) #向用户显示我们正在执行的操作。。。 #wikipedia.output(u“\n\n>>\03{lightpurple}%s\03{default}<<”%rootpage.title()) wikipedia.output(u“相关文章:”) wikipedia.output(相关) #如果设置了-debug,则无需再执行任何操作。 如果自我调试: wikipedia.output(u“\n\n”) 返回 #确认我们应该创建页面(除非设置了-always)。 如果不是自己,请始终: choice=wikipedia.inputChoice(u'是否要创建相关文章子页面?',['Yes','No'],['Y','N'],'N') 如果不是,选择==“y”: wikipedia.output(u“\n”) 返回 before=u“<noinclude>{{subpages}}</noinclude>\n\n==父主题==\n\n==子主题==\n\n\n==其他相关主题==\n \n\n” intro=“<!--将链接复制到其他节后删除下面的节。-->\n==Bot-suggested topics==\n基于[[Special:WhatLinksHere/%s]]自动填充。需要人工检查。\n\n”%rootpage.title() after=u“\n\n{{Bot-created_related_article_subpage}}\n<!--将链接复制到其他节后删除上面的节。-->” related=之前+介绍+相关+之后 #创建“相关文章”子页面。 尝试: 维基百科。 页面(wikipedia.getSite(),rootpage.title()+“/Related_Articles”).put(Related) 除了维基百科。 锁定页面: wikipedia.output(u“页面%s已锁定;正在跳过。”%Page.aslink()) 除了维基百科。 编辑冲突: wikipedia.output(u“由于编辑冲突而跳过%s”%(page.title())) 除了维基百科。 垃圾邮件过滤器错误,错误: wikipedia.output(u“由于垃圾邮件黑名单条目%s,无法更改%s”%(page.title(),error.url)) wikipedia.output(u“\n”) 定义main(): start='!' debug=错误 always=错误 #分析命令行参数 对于wikipedia.handleArgs()中的arg: 如果参数启动开关(“-start”): 开始=参数[7:] elif参数启动开关(“-debug”): debug=真 elif参数启动开关(“-始终”): 始终=真 gen=页面生成器。 PreloadingGenerator(pagegenerators.AllpagesPageGenerator(start=start,namespace=0,includeredirects=False)) bot=相关文章bot(gen,debug,always) 机器人运行() 如果__name__==“__main__”: 尝试: main() 最后: 维基百科.stopme()