sakugabooru微博机器人是如何运作的

Posted by V-ISLAND on Sunday, April 8, 2018

首先得先说明,虽然笔者大概地看过源代码,但笔者并没有参与程序的编写,我是半年前才开始帮忙管理诸如tag翻译之类的琐事的。这里仅简单地给想了解的人讲解一下这个机器人的运行处理流程。

本bot基于Django编写,使用的后台管理也是Django自带的管理模板。 bot定时每小时一次执行任务,如果留意过的话很容易发现每批新微博都是一小时内某个时间点开始的,如果不一样那可能是重启过程序。任务内容大概是这么个流程:

  1. 抓取booru更新内容,对每个新稿件分别进行接下来的任务。

  2. tag处理,先看当前数据库里有没有这tag,有的话直接读数据库的数据,否则新建。tag中的作品类别和人物类别在新建的同时会在网络上查询原名以及作品译名。人物原名查询自ANN,作品原名查询自MAL,作品译名查询自bangumi。判断是否吻合的方法是判断字符串的相似度,计算相似度大于一定值就判断吻合,关联译名、原名、英文名。这里判断错误的可能性是比较大的,所以偶尔会关联错名字。

    后台管理界面里可以手动更改每个tag的关联名字,所有在微博里一开始是英文后来变中文的都是手动改的。顺便uploader不会自动加进数据库但可以手动加(ry

    tag处理完后就按格式生成微博所发的文本了。

  3. gif生成。jpg、jpeg、png的就不处理直接传,gif会截取大小后再传,mp4和webm则转成gif后再截取再传。gif截取的参数是fps=14, width=360, MAX_SIZE=9216000(单位b,约等于8.78mb)。视频转gif使用的是FFmpeg。遇到上面没提及到的后缀名时跳过此稿件。

  4. 上传微博

基本就是这么个流程,至于微博账号我是会偶尔上去看看评论提醒的,因为可能有tag翻译的问题反馈。私信虽然看但为了避免一些回一些不回的问题我就都没回复,然后前段时间也设置了自动回复,好奇自动回复内容的人可以试试(x 基本是对常见私信内容的回复就是了。


2018.08.02更新:

此次更新在运行流程上主要是增加了作品名的名字获取途径。在上文MAL、BGM的流程基础上增加了辅助来源Google Knowledge Graph Search。在原流程查询不到译名的情况下将调用Google Knowledge Graph Search直接使用原来的英文名进行搜索匹配,一次性匹配到可能的日文名和中文名。经测试匹配效率比原先的流程高不少,只是对续作之类的title匹配不大好(x但总体而言,两种流程配合使用,作品名的匹配命中度应该会高很多。