xcnbotXiayicidenglu Category Navigation roBOT)是一个添加和维护各类别分类树导航的机器人,由User:下一次登录操作,已于2007年5月6日被批准成为正式机器人。xcnbot分析维基百科的分类结构,并使用{{catnav}}模板在每一个类别顶端说明其母类别的分类树,例如对Category:亚洲国家,显示:

页面分类 > 地理 > 国家 > Xcnbot
页面分类 > 地理 > 大洲 > 亚洲 > Xcnbot

原理和程序

分两步进行,首先是自上而下的添加,然后是自下而上的检查和删除。

  • 第一部分源代码:/1 11:54 2007年3月31日 (UTC)更新
  • 第二部分源代码:/2 11:54 2007年3月31日 (UTC)更新


自上而下

从根目录:“页面分类”开始,广度优先的遍历所有子类别,使用递归方式处理每一个类别:

  • 设定
    • 类别树深度(“cDepth”)=5
    • 修改计数器(“cChange”)=0
  • 初始化
    • 当前类别名(“vCCName”)=“页面分类”或任一类别(对其子类别进行处理)
    • 当前母类别阵列(“aCCTree[100]”)= NA
    • 母类别树深度(“aCCDepth”)= 0
  • 递归
    • 输入:vCCName,aCCMother,aCCDepth
    • 赋值:aCCTree[aCCDepth]=vCCName
    • 检查是否有重复类别名,如果有,则报错停止。
    • 所有子类别:
      • 连接并提取编辑内容,检查是否有aCCTree[]的catnav导航,如果否:
        • 加入catnav
        • 修改计数器加1
    • 所有子类别:
      • vCCName=子类别名,调用递归。

自下而上

  1. 连结所有页面中的category空间页面: http://zh.wikipedia.org/w/index.php?title=Special%3AAllpages&from=&namespace=14
  2. 对每一个类别,统计{{catnav}}模板的个数
    1. 对于每一个{{catnav}}模板,从后到前检查是否正确
      1. 如果正确,检查下一个模板
      2. 如果错误,删除该模板
  3. 下一个类别,如果超过三个模板,则删除剩下的所有模板。

检查模板的细节:

  1. 从后到前读取{{catnav}}模板中的各类别名
  2. 检查当前类别是否被分类于上一级类别中,如果没有,则报错结束。如果有,则进入上一级类别,然后重复。

进度和问题

  • 目前已经完成1.1部分。
    • 调试约500次编辑,尚未发现异常。11:13 2007年3月13日 (UTC)
  • 完成第二部分,并调试成功。正式申请机器人。11:53 2007年3月31日 (UTC)
  • 被批准。2007年5月6日 (日) 11:39 (UTC)
  • 发现循环分类bug,修改完成。2007年5月7日 (一) 12:32 (UTC)
  • 同一个类别使用catnav模板次数过多,已经有超过10个,影响美观和实用性,计划修改源代码。2007年5月14日 (一) 04:13 (UTC)

日志

  • 2007年5月7日 (一) 04:48 (UTC):运行第一部分。
    • 2007年5月7日 (一) 11:58 (UTC)停止运行,发现一个bug,在类别循环(“美国电视剧”“美国影集”循环)时不能跳出。