用户:Caesar Schinas/pwb/cg_related.py

来自Citizendium
跳转到导航 跳转到搜索


2022年3月服务器升级后,该前贡献者的帐户未重新激活。


这是一个印刷电路板我编写的脚本,用于根据Special:WhatLinksHere为那些没有相关文章的文章自动创建相关文章子页面。

这些自动创建的页面需要人工检查和编辑,中列出了尚未执行此操作的项目类别:机器人创建的相关文章子页面.

#!/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()