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

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

  •  2
     
  •   lhx2008 ·
    xenv · Aug 5, 2018 · 8274 views
    This topic created in 2837 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
        1
    monkeylmj  
       Aug 6, 2018 via Android
    lhx2008
        2
    lhx2008  
    OP
       Aug 6, 2018
    @monkeylmj V2 只能 markdown 才能加自己的图片,回复只能用 v2 图床和新浪的
    monkeylmj
        3
    monkeylmj  
       Aug 6, 2018 via Android
    @lhx2008 长姿势了
    mooncakejs
        4
    mooncakejs  
       Aug 6, 2018 via iPhone
    数据不大直接加载到内存比较好吧,干嘛还要 redis
    lhx2008
        5
    lhx2008  
    OP
       Aug 6, 2018
    @mooncakejs

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

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

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

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

    @sevenQu

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

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