/yinshiGo

稻花香里说丰年,听取人生经验。

Primary LanguageGoGNU Affero General Public License v3.0AGPL-3.0

yinshiGo - 又一个吟诗API服务器

稻花香里说丰年,听取人生经验。

yinshiGo是一个简单的“吟诗”(类一言)服务器,使用Go语言实现,其核心特性在于支持多源多路径服务(一个进程,吟三种诗)和即时重载(便于在线获取最新语录)。

目前开发者维护有一个repo用于收录、更新吟诗内容:popu125/yinshiDB

快速开始

Release 页面 获取一个编译好的二进制文件是最快的解决方案,如果你需要一个带了数据库的版本,可以下载带有withdb后缀的文件包,其中包括了发布时最新的吟诗数据。

配置指北

yinshiGo 使用 JSON 作为配置文件,格式如下:

{
  "address": ":4399",    //监听地址
  "reload": "10m",       //重载时间,设置为off可关闭自动重载 
  "servers": [           //服务器数组,此下每对花括号为一个服务
    {
      "path": "/mini",   //语集api目录
      "file": "mini.csv" //语集数据文件
    },
    {
      "path": "/hitokoto",
      "file": "hitokoto.csv"
    },
    {
      "path": "/hitokoto_uid",
      "file": "hitokoto_uid.csv"
    }
  ]
}

你可以在后台同时开个脚本定期pull/wget,以定期更新来自网络上的内容。

启动时可以通过-c <config.json>参数指定config文件,通常你不需要设置这个玩意,默认值即为config.json

启动后 yinshiGo 将会监听address项配置的地址,每个语集将在子目录中提供两个API:/get用于获取一句话,/full用于获取一句带着来源的话。如上面的实例中,通过访问http://127.0.0.1:4399/mini/get可以获取到一句不带来源的诗词。

创建语集

CSV格式

CSV(逗号分割符文件) 是 yinshiGo 选择用于存取句子信息的格式,选择csv的主要目的是其便于编辑(常见office方案均很好地支持csv),便于版本管理(纯文本),便于自动化生成(结构简单)。

yinshiGo 所需要的csv文件格式如下:

语句1,来源1
语句2,来源2
语句3,来源3
语句4,来源4

通常情况下你不需要关心这个格式,只需要打开你的office套件中的表格工具,新建或打开一个csv,office已经为你做了所有该做的,你只需要记得表格的第一列写语句,第二列写来源(非强制)就行了。

常见错误

如果你在修改或创建一个语集后,打算运行时遇到了类似这样的一个错误:

Cannot parse data file: line 1, column 0: wrong number of fields in line

那么这是因为你的语句或来源中包含有英文逗号,,而你并没有使用英文引号将整个语句(或来源)包裹起来,这导致 yinshiGo 无法判断这一行中哪里是语句、哪里是来源。

通常该问题不会在使用office套装编辑语集的人身上发生,因为office已经为你做了这个处理。

去重

去重是一个非常重要的工作,尤其是当你的语集是采集而来而且还像一言的用户数据库一言有超过一半的重复条目时。

但是去重也不复杂,因为通常的office工具已经提供了这样的功能,以MS office2016为例,你只需要选择“数据”-“删除重复项”即可自动去重。

上线之前

正如我们所知,公开提供API服务对你的服务器来说总是很危险的,在真正上线提供服务之前,你需要做好防护措施,防备某些闲得蛋疼的大佬或小白。

反代

如果能够使用Nginx反代你的API服务,那自然是最好了。Nginx能够为你提供足够强大的路由管理、访问控制和日志功能。

CDN

CF的CDN总能为你提供不错的源IP隐藏和dd保护效果,如果可能,尽量要上一个。同时要做好安全处理,参考我的博文[正确使用cf保护你的网站]。

因为我们是API服务,所以通常不建议开启“5秒盾”。这样一来cf的防cc效果可能会大打折扣,但是总比没有强。

频次限制

如果你不想一觉醒来发现服务器流量跑光了,或者突然宕机的话,你最好基于IP做好频次的限制。这样的防护或许不足以挡住很多恶意的cc攻击(如基于wp漏洞的集群式cc),但是起码可以阻挡部分不停刷新党和用本机cc的“年轻”人。

心理准备

要做好随时被日的心理准备,毕竟这年头,在网上晃悠的人大部分都比较闲。