一言·古诗词 API,随机返回一条古诗词名句,支持 svg/json/png/txt 返回, Vert.x 异步框架 + Redis 开发,毫秒级稳定响应。 [开源]

2018-08-05 21:47:14 +08:00
 lhx2008



简介

古诗词·一言 API 是一个可以随机返回一句古诗词名句的接口。(可刷新本页查看效果)

具有以下特点:

  • 快:使用 Vert.x Java 异步框架开发,使用 Redis 数据库,确保毫秒级稳定响应。
  • 多:收录将近 10000 条古诗词名句
  • 全:支持 svg / txt / json / png 调用,满足你在任何地方的调用需求
  • 准:可以根据你的喜好,在指定的分类中进行随机返回

项目首页:https://gushi.ci

项目 Github: https://github.com/xenv/gushici


API 举例

API 地址格式(仅支持 https)

https://api.gushi.ci/{一级分类}/{二级分类(可选)}.{返回格式(可选)}

查看所有目前支持的分类:https://api.gushi.ci/

目前支持的后缀:.svg .txt .png .json 不加后缀默认返回 json

例子:SVG 调用
<img src="https://api.gushi.ci/all.svg">

SVG 后缀是我们推荐的最优调用方案,可以在部分论坛、任何博客、小程序内无损直接调用,并且可以一定程度上控制样式。缺点是部分老旧浏览器不支持。

其他调用方案见:https://gushi.ci

闲话

无意中了解到 hitokoto API,感于没有古诗词方面的 API,便想自己动手撸一个。并且,在返回结果的类型上,做了更多大胆的尝试。可以说是很有创新的。

技术栈上,第一次尝试 使用 Vert.x 开发应用,整个开发耗时两天,Vert.x 整体来说性能确实不错,响应时间一般在 15ms 以内,而本地则在 5ms 以内。但是相关生态确实不完善。异步编程也带来了更多的 bug,对于调试来说也是一个不小的挑战。

数据库我直接选择了 Redis,原因一个是为了追求极速的响应速度,第二是数据一般没有什么变化,查询也简单,没有必要用 mysql 等落地。直接从 Python 数据源采集发到 redis 即可。欢迎有兴趣的同学共同学习,提意见。

7479 次点击
所在节点    分享创造
58 条回复
monkeylmj
2018-08-06 00:21:36 +08:00
lhx2008
2018-08-06 00:22:44 +08:00
@monkeylmj V2 只能 markdown 才能加自己的图片,回复只能用 v2 图床和新浪的
monkeylmj
2018-08-06 00:24:30 +08:00
@lhx2008 长姿势了
mooncakejs
2018-08-06 00:26:04 +08:00
数据不大直接加载到内存比较好吧,干嘛还要 redis
lhx2008
2018-08-06 00:32:31 +08:00
@mooncakejs

1. 数据不少,一万条,png 用 base64 存,有 20 多 M
2. 访问量统计需要持久化
3. 可以异地 /跨语言直接发布新的数据,现在的数据就是由 python 发上去的
karottc
2018-08-06 00:50:01 +08:00
优秀,后生可畏
imhx233
2018-08-06 01:35:50 +08:00
哇 其实这也是我一直想做的(奈何没技术)。

可以考虑下根据诗人甚至具体到某一首诗来返回一言。

本来想自己部署一个的,但是部署方式太复杂了,于是只能作罢。
twor
2018-08-06 01:45:45 +08:00
能支持自定义语句吗

比如 ” PHP 是最好的语言 - 爱因斯坦“
lhx2008
2018-08-06 07:42:55 +08:00
@imhx233
现在的话只能是写死的分类了,如果要多纬度的话可能要用 mongo 重新做数据源
自定义语句,现在是可以用 redis 命令自己添加的,不支持用户添加。
densuc
2018-08-06 08:03:39 +08:00
哈哈哈 记得 你还是高中生吧 😁
lhx2008
2018-08-06 08:10:21 +08:00
@densuc 你这怕是几年前的记忆 😂
missdeer
2018-08-06 08:59:21 +08:00
数据库能分享吗
dejavuwind
2018-08-06 09:02:05 +08:00
手动点赞。古诗词我还是很喜欢的。
E0
2018-08-06 09:03:47 +08:00
赞一个,有些一言 api 句子真的尴尬中二。
henbf
2018-08-06 09:24:51 +08:00
<kbd><img src="https://api.gushi.ci/all.svg"></kbd>
sagaxu
2018-08-06 09:24:58 +08:00
才 10K 条,png 不需要 base64 编码,全放内存里很合适,毕竟 JVM 基础开销都不止 20M 了。统计可以记录到进程内,定期往 db 里刷写。
Sanko
2018-08-06 09:31:37 +08:00
支持楼主,这个一定时间内有没有访问次数限制?
lhx2008
2018-08-06 09:34:20 +08:00
@Sanko 暂时没有, 不过如果服务器顶不住的话会在 nginx 加规则,当然还是以宽松为主。
lhx2008
2018-08-06 09:35:42 +08:00
@missdeer 自行采集吧,数据源是 古诗文网 的名句,还是保留点私货哈哈
kokdemo
2018-08-06 10:12:10 +08:00
这个有点帅啊!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX