爱意满满的作品展示区。
lhx2008

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

  •  2
     
  •   lhx2008 ·
    xenv · Aug 5, 2018 · 8943 views
    This topic created in 3016 days ago, the information mentioned may be changed or developed.



    简介

    古诗词·一言 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 即可。欢迎有兴趣的同学共同学习,提意见。

    Supplement 1  ·  Aug 6, 2018
    有计划用 mongo 重写数据源,以便更快的响应多数据源和多纬度搜索
    Supplement 2  ·  Sep 25, 2018
    新版接口,根据时间地点天气事件推荐一句古诗词: https://www.v2ex.com/t/492535
    58 replies  •  2018-08-12 09:39:21 +08:00
    monkeylmj
    monkeylmj
    Aug 6, 2018 via Android
    1
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    2
    @monkeylmj V2 只能 markdown 才能加自己的图片,回复只能用 v2 图床和新浪的
    monkeylmj
    monkeylmj
    Aug 6, 2018 via Android
    3
    @lhx2008 长姿势了
    mooncakejs
    mooncakejs
    Aug 6, 2018 via iPhone
    4
    数据不大直接加载到内存比较好吧,干嘛还要 redis
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    5
    @mooncakejs

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

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

    本来想自己部署一个的,但是部署方式太复杂了,于是只能作罢。
    twor
    twor
    Aug 6, 2018
    8
    能支持自定义语句吗

    比如 ” PHP 是最好的语言 - 爱因斯坦“
    lhx2008
    lhx2008
    OP
    Aug 6, 2018 via Android
    9
    @imhx233
    现在的话只能是写死的分类了,如果要多纬度的话可能要用 mongo 重新做数据源
    自定义语句,现在是可以用 redis 命令自己添加的,不支持用户添加。
    densuc
    densuc
    Aug 6, 2018 via iPhone
    10
    哈哈哈 记得 你还是高中生吧 😁
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    11
    @densuc 你这怕是几年前的记忆 😂
    missdeer
    missdeer
    Aug 6, 2018
    12
    数据库能分享吗
    hiwind
    hiwind
    Aug 6, 2018 via Android
    13
    手动点赞。古诗词我还是很喜欢的。
    E0
    E0
    Aug 6, 2018 via Android
    14
    赞一个,有些一言 api 句子真的尴尬中二。
    henbf
    henbf
    Aug 6, 2018
    15
    <kbd><img src="https://api.gushi.ci/all.svg"></kbd>
    sagaxu
    sagaxu
    Aug 6, 2018 via Android❤️1
    16
    才 10K 条,png 不需要 base64 编码,全放内存里很合适,毕竟 JVM 基础开销都不止 20M 了。统计可以记录到进程内,定期往 db 里刷写。
    Sanko
    Sanko
    Aug 6, 2018
    17
    支持楼主,这个一定时间内有没有访问次数限制?
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    18
    @Sanko 暂时没有, 不过如果服务器顶不住的话会在 nginx 加规则,当然还是以宽松为主。
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    19
    @missdeer 自行采集吧,数据源是 古诗文网 的名句,还是保留点私货哈哈
    kokdemo
    kokdemo
    Aug 6, 2018
    20
    这个有点帅啊!
    pipijin
    pipijin
    Aug 6, 2018 via Android
    21
    优秀
    kran
    kran
    Aug 6, 2018 via iPhone
    22
    看了这个帖子自己写了一个,30 多万的数据 us 级响应,sqlite 数据库
    lhx2008
    lhx2008
    OP
    Aug 6, 2018 via Android
    23
    @kran 走 http 吗?其实我感觉时间主要还是看 http 框架和链路上的各种反代和防火墙了
    sangmong
    sangmong
    Aug 6, 2018
    24
    赞
    dyxang
    dyxang
    Aug 6, 2018
    25
    楼主 good,用的是这个库吗,在这里: https://github.com/chinese-poetry/chinese-poetry
    lhx2008
    lhx2008
    OP
    Aug 6, 2018 via Android
    26
    @dyxang 谢谢,看过这个,这个没有名句的数据,我自己在网上随便找的数据
    run2
    run2
    Aug 6, 2018
    27
    字体看着虚, 用个开源的黑体?
    dyxang
    dyxang
    Aug 6, 2018❤️1
    28
    @sobigfish 黑体就没有古风的感觉了
    楼主为何不用古体字,类似方正龙爪字体,或者文悦古典明朝体(非商用)
    这是文悦古典明朝体的
    run2
    run2
    Aug 6, 2018
    29
    @dyxang #28 因为版权问题-。- 所以我建议用开源的字体
    dyxang
    dyxang
    Aug 6, 2018
    30
    @sobigfish (非商用)
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    31
    @dyxang
    svg 用的是用户的系统字体,而不是我这边生成,svg 默认是楷体,如果没有是用雅黑或者其他系统字体。小众字体要有效果必须要用户电脑安装了字体。你可以在引用的时候修改 SVG 的 CSS,嵌入网络字体。
    png 是我这边生成,用的是思源宋体,
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    32
    @sobigfish 见上
    lhx2008
    lhx2008
    OP
    Aug 6, 2018
    33
    font-family='KaiTi, "Segoe UI", "Lucida Grande", Helvetica, Arial, "Microsoft YaHei", FreeSans, Arimo, "Droid Sans","wenquanyi micro hei","Hiragino Sans GB", "Hiragino Sans GB W3", sans-serif'
    kran
    kran
    Aug 6, 2018 via iPhone
    34
    kran
    kran
    Aug 6, 2018 via iPhone
    35
    @lhx2008 这点数据确实没必要要求数据库怎么样。
    sevenQu
    sevenQu
    Aug 6, 2018
    36
    感觉挺好的,不知道为什么,我必须要翻墙才能看到你的网站和 api 返回,是我的原因吗?,ps:如果是返回是完整的诗会更好,总是一句经典的,我个人总想去看看全诗是什么
    lhx2008
    lhx2008
    OP
    Aug 7, 2018 via Android
    37
    @sevenQu 没有被墙,可能是 dns 的问题吧,小众域名管理局的 dns 不给力,有机会还是换回主流域名吧
    vjnjc
    vjnjc
    Aug 7, 2018
    38
    已 star。
    请问楼主能部署在我的域名下嘛?买了一个域名不知道放点啥 0 0
    vjnjc
    vjnjc
    Aug 7, 2018
    39
    再看了一下,svg 的效果很好啊,原来能这么用
    lhx2008
    lhx2008
    OP
    Aug 7, 2018 via Android
    40
    @vjnjc 哈?我就是为了这个项目专门注册了个域名
    E1n
    E1n
    Aug 7, 2018 via Android
    41
    不错👍
    vjnjc
    vjnjc
    Aug 7, 2018
    42
    @lhx2008 前阵子脑袋一热买了个域名,现在没东西放。请问楼主我能编译下你的源码,然后挂我自己域名下嘛?(你要是不介意的话
    lhx2008
    lhx2008
    OP
    Aug 7, 2018 via Android
    43
    @vjnjc GPL 协议的,你自己可以编译运行来玩啊,只是不能卖给别人。
    我没有提供完整的古诗词数据在 github 上面,不过代码是没问题的。所以你自己玩还要自己采集下数据。
    lhx2008
    lhx2008
    OP
    Aug 7, 2018 via Android
    44
    @vjnjc 或者你自己直接用 nginx 反代我的 api,哈哈
    vjnjc
    vjnjc
    Aug 7, 2018
    45
    @lhx2008 好的,那我自己编译一份~
    sangmong
    sangmong
    Aug 8, 2018
    46
    想要整首诗。。。类似西窗烛那种
    quickma
    quickma
    Aug 8, 2018
    47
    太强了
    lemcon
    lemcon
    Aug 10, 2018
    48
    特地登录一个 n 年前的账号上来狂顶楼主
    lemcon
    lemcon
    Aug 10, 2018
    49
    楼主,什么时候能加关键词呀?
    lhx2008
    lhx2008
    OP
    Aug 10, 2018 via Android
    50
    @lemcon 谢谢,会考虑提供更多标签(分类)和更加智能的显示,但是根据关键词搜索结果这个,没有在计划内,不过你也可以自己稍微改一下来玩玩。(只采集你想要的关键词的诗导入就可以)
    keller
    keller
    Aug 10, 2018
    51
    无法访问此网站
    gushi.ci 的响应时间过长。
    lhx2008
    lhx2008
    OP
    Aug 10, 2018 via Android
    52
    @keller 能给我看下 ping 的结果吗,看看解析到哪里去了
    lhx2008
    lhx2008
    OP
    Aug 10, 2018 via Android
    53
    @keller gushi.ci 是静态页面,不存在响应时间过长。。
    lhx2008
    lhx2008
    OP
    Aug 10, 2018 via Android
    54
    @keller

    @sevenQu

    项目首页更换到了阿里云香港 oss,原来是东京机房,现在不知道会不会访问正常了
    ibegyourpardon
    ibegyourpardon
    Aug 11, 2018
    55
    svg 在线是用什么生成的……
    lhx2008
    lhx2008
    OP
    Aug 11, 2018
    56
    @ibegyourpardon 在浏览器打开 svg,右键查看源代码你就懂了。
    ibegyourpardon
    ibegyourpardon
    Aug 12, 2018
    57
    @lhx2008 噗……

    可是那 PNG 就实在看不懂了,这总得实时生成绘图吧。
    lhx2008
    lhx2008
    OP
    Aug 12, 2018
    58
    @ibegyourpardon 离线绘图然后丢进 redis,实时太慢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   754 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 146ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    ♥ Do have faith in what you're doing.