收起左侧

使用Docker部署日历API

2
回复
452
查看
[ 复制链接 ]

77

主题

90

回帖

0

牛值

小有名气

镜像是我制作的,欢迎关注我B站账号 秦曱凧 (读作 qín yuē zhēng)
后面有新的项目,会在B站先发,欢迎关注。

项目介绍

这是一个个人自用的 API。通过请求不同路径返回不同的信息,包括农历信息,随机一言,随机诗词。

所有请求都是 GET 请求,默认返回 JSON 数据。

这个项目是我用在安卓小部件自定义软件 KWGT 上的。所以所有返回内容的属性名称除了中文之外还有一个拼音缩写的名称。

项目仓库

  • GitHub 仓库 https://github.com/Firfr/jin_ri
  • Gitee 仓库 https://gitee.com/firfe/jin_ri

这个项目没有提供公共接口(没钱买云服务器),需要自行部署。

欢迎关注我B站账号 秦曱凧 (读作 qín yuē zhēng)

有需要帮忙部署这个项目的朋友,一杯奶茶,即可程远程帮你部署,需要可联系。
微信号 E-0_0-
闲鱼搜索用户 明月人间
或者邮箱 firfe163@163.com
如果这个项目有帮到你。欢迎 start。

目录

使用到的项目

  • 农历相关使用的是 Lunisolar
    • 专业的 Javascript 农历库
    • 官网 https://lunisolar.js.org
    • GitHub https://github.com/waterbeside/lunisolar
  • 一言句子库来自一言官方
    • 官网 https://hitokoto.cn
    • GitHub https://github.com/hitokoto-osc/sentences-bundle
  • 诗词来源 chinese-poetry/chinese-poetry
    • 最全中华古诗词数据库, 唐宋两朝近一万四千古诗人, 接近 5.5 万首唐诗加 26 万宋诗. 两宋时期 1564 位词人,21050 首词。
    • 官网 https://github.com/chinese-poetry/chinese-poetry
    • GitHub https://awesome-poetry.top
    • 诗词只使用了其中的元曲.json唐诗三百首.json宋词三百首.json曹操.json水墨唐诗.json纳兰性德诗集.json诗经.json并进行了格式化。

使用到的模块

  • 服务端 Express
  • 跨域相关 cors
  • 调试运行 nodemon
  • 农历库 Lunisolar 为了减小体积用的是单文件,不是 npm 包。

项目配置

  • 端口
    • 默认端口:1234,可以通过环境变量PORT修改。
  • 跨域
    • 跨域策略,通过环境变量CORS的值进行设置。默认是 0
      • -1 不允许跨域
      • 0 仅允许跨域列表中的域名跨域访问
      • 1 允许所有网站跨域访问
    • 允许跨域访问的域名列表设置
      • 跨域列表文件在代码/配置/跨域列表.txt
      • 文件中,一行一个域名,只写域名,不要写路径,//开头的会忽略
      • 示例内容
        // 跨域列表,一行一个域名
        http://192.168.13.20:5500/
        http://192.168.13.7:1052/
        
    • 如果跨域列表不会配置,直接设置环境变量CORS=1允许全部跨域访问,或者设置环境变量CORS=-1不允许跨域访问
  • 认证
    • 认证是必须得,放置恶意访问,
    • 认证文件在代码/配置/用户认证.json
    • 示例如下
      [
        {
          "用户名": "用户一",
          "令牌": "qwer"
        },
        {
          "用户名": "用户二",
          "令牌": "asdf"
        }
      ]
      
    • 整体是一个数组,每个对象是一个用户,用户名和令牌是必须的,用户名是给自己看的,令牌的值需要再请求的时候填写。
    • 在请求时增加查询字符串token,值为用户令牌,如:?token=qwer

接口说明

所有请求都是 GET 请求,查询字符串token是必须的。

jin_ri

  • 请求路径

    /jin_ri/?token=令牌
    

    令牌的具体内容就是用户认证文件中的令牌

  • 返回示例

    {
      "公历": {
        "年": 2025,
        "月": 10,
        "日": 21
      },
      "gl": {
        "n": 2025,
        "y": 10,
        "r": 21
      },
      "星期": 2,
      "星期大写": "二",
      "xq": 2,
      "xqdx": "二",
      "日期": "2025-10-21",
      "时间": "15:53:58.823",
      "rq": "2025-10-21",
      "sj": "15:53:58.823",
      "农历": {
        "年": "二〇二五年",
        "月": "九月(大)",
        "日": "初一",
        "时": "申時"
      },
      "nl": {
        "n": "二〇二五年",
        "y": "九月(大)",
        "r": "初一",
        "s": "申時"
      },
      "季节": "秋",
      "jj": "秋",
      "天干地支": {
        "年": "乙巳",
        "月": "丙戌",
        "日": "癸亥",
        "时": "庚申"
      },
      "tgdz": {
        "n": "乙巳",
        "y": "丙戌",
        "r": "癸亥",
        "s": "庚申"
      },
      "节气": "无",
      "jq": "无",
      "节气前": {
        "节气": "寒露",
        "节气日期": "2025-10-8",
        "过去天数": 13
      },
      "jqq": {
        "jq": "寒露",
        "rq": "2025-10-8",
        "ts": 13
      },
      "节气后": {
        "节气": "霜降",
        "节气日期": "2025-10-23",
        "距离天数": 2
      },
      "jqh": {
        "jq": "霜降",
        "rq": "2025-10-23",
        "ts": 2
      },
      "宜5": "整手足甲,整容,剃頭",
      "忌5": "修置產室,選將訓兵,嫁娶,安撫邊境,出師",
      "宜": "整容,剃頭,整手足甲",
      "忌": "安撫邊境,選將訓兵,出師,嫁娶,修置產室",
      "y5": "整手足甲,剃頭,整容",
      "j5": "修置產室,選將訓兵,安撫邊境,嫁娶,出師",
      "y": "整容,剃頭,整手足甲",
      "j": "安撫邊境,選將訓兵,出師,嫁娶,修置產室"
    }
    

    宜5忌5是从中随机抽取 5 个。

yi_yan

  • 请求路径

    /yi_yan/?token=令牌
    

    令牌的具体内容就是用户认证文件中的令牌

  • 其他查询字符串

    • 查询字符串除了token外,其他参数都是可选的,可以不填。
    • t 句子类型,默认随机,具体值参考项目 句子类型
    • n 句子的最小长度,默认 1,句子库中最短句子是 2 字
    • x 句子的最大长度,默认 30,句子库中最长句子是 130 字
    • c 返回格式,默认 JSON,1 是纯文本,纯文本只返回句子本身
  • 请求示例

    • 默认
      /yi_yan/?token=令牌
      
    • 指定类型
      /yi_yan/?token=令牌&t=c
      
    • 指定最小长度
      /yi_yan/?token=令牌&n=5
      
    • 指定最大长度
      /yi_yan/?token=令牌&x=5
      
    • 指定返回类型
      /yi_yan/?token=令牌&c=1
      
  • 返回示例

    • JSON
      {
        "类型": "其他",
        "内容": "握不住的沙,不如扬了它。",
        "出处": "其他",
        "作者": "未知",
        "长度": 12,
        "lx": "其他",
        "nr": "握不住的沙,不如扬了它。",
        "cc": "其他",
        "zz": "未知",
        "cd": 12
      }
      
    • 纯文本
      唯有门前镜湖水,春风不改旧时波。
      
  • 关于句子的出处和作者

    • 如果句子是某个作品中的虚拟人物,出处是该作品,作者为该作品中的虚拟人物。

句子类型

参数 说明
a 动画
b 漫画
c 游戏
d 文学
e 原创
f 来自网络
g 其他
h 影视
i 诗词
j **云
k 哲学
l 抖机灵
其他 随机

shi_ci

  • 请求路径

    /shi_ci/?token=令牌
    

    令牌的具体内容就是用户认证文件中的令牌

  • 其他查询字符串

    • 查询字符串除了token外,只有一个t,可以不填。
    • t 诗词类型,默认随机。
      参数 说明
      c 曹操
      n 纳兰性德诗集
      sj 诗经
      sm 水墨唐诗
      sc 宋词三百首
      t 唐诗三百首
      y 元曲
  • 返回示例

    {
      "诗词类型": "唐诗三百首",
      "作者": "李商隱",
      "朝代": "唐",
      "标题": "隋宮",
      "内容": [
        "紫泉宮殿鎖煙霞,欲取蕪城作帝家。",
        "玉璽不緣歸日角,錦帆應是到天涯。",
        "于今腐草無螢火,終古垂楊有暮鴉。",
        "地下若逢陳後主,豈宜重問後庭花。"
      ],
      "内容文本": "紫泉宮殿鎖煙霞,欲取蕪城作帝家。\n玉璽不緣歸日角,錦帆應是到天涯。\n于今腐草無螢火,終古垂楊有暮鴉。\n地下若逢陳後主,豈宜重問後庭  花。",
      "nrwb": "紫泉宮殿鎖煙霞,欲取蕪城作帝家。\n玉璽不緣歸日角,錦帆應是到天涯。\n于今腐草無螢火,終古垂楊有暮鴉。\n地下若逢陳後主,豈宜重問後庭花。  ",
      "zz": "李商隱",
      "cd": "唐",
      "bt": "隋宮",
      "nr": [
        "紫泉宮殿鎖煙霞,欲取蕪城作帝家。",
        "玉璽不緣歸日角,錦帆應是到天涯。",
        "于今腐草無螢火,終古垂楊有暮鴉。",
        "地下若逢陳後主,豈宜重問後庭花。"
      ]
    }
    

    所有属性中只有诗词类型标题bt``内容nr内容文本nrwb是固定有的,其他属性不固定,可能没有。

本地运行

  • 本地有 node 环境,node 版本 20 以上
  • 下载项目
  • 进入项目目录
  • 安装依赖
    npm i
    
  • 配置用户认证和跨域列表
  • 运行
    npm run start
    

Docker 运行

镜像

从阿里云或华为云镜像仓库拉取镜像,注意填写镜像标签,镜像仓库中没有latest标签

容器内部端口1234,可通过设置环境变量PORT的值来指定监听端口。使用环境变量CORS设置跨域策略。

  • 国内仓库
    • AMD64 镜像
      swr.cn-north-4.myhuaweicloud.com/firfe/jin_ri:1.0
      
    • ARM64 镜像
      swr.cn-north-4.myhuaweicloud.com/firfe/jin_ri:1.0-arm64
      
  • DockerHub 仓库
    • AMD64 镜像
      firfe/jin_ri:1.0
      
    • ARM64 镜像
      firfe/jin_ri:1.0-arm64
      

docker run 命令部署

docker run -d \
--name jin_ri \
--network bridge \
--restart always \
--log-opt max-size=1m \
--log-opt max-file=1 \
-p 1234:1234 \
-v ./data:/app/代码/配置 \
firfe/jin_ri:1.0

compose 文件部署 👍 推荐

name: jin_ri
services:
  jin_ri:
    container_name: jin_ri
    image: swr.cn-north-4.myhuaweicloud.com/firfe/jin_ri:1.0
    network_mode: bridge
    restart: always
    logging:
      options:
        max-size: 1m
        max-file: "1"
    #environment:
      # 自定义端口
      #PORT: 1234
      # 跨域策略
      # -1 不允许跨域,0 指定跨域列表,1 允许所有跨域
      #CORS: 0
    ports:
      - 1234:1234
    volumes: 
      - ./data:/app/代码/配置

效果示例

API 接口在安卓手机上使用 KWGT 建立小部件的示例。

今日 一言 诗词
Screenshot_20251223_194925.jpg 一言.jpg 诗词.jpg
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

77

主题

90

回帖

0

牛值

小有名气

前天 19:52 楼主 显示全部楼层

KWGT基础语法

常用

在一个小部件中随处引用。

  • 引用变量

    $gv(变量名称)$
    

    或者点击编辑框的地球图标获取

  • 变量拼接

  • 网络请求

    • 返回内容txt

      $wg("网址", txt)$
      
    • 返回内容json

      $wg("网址", json, .a.b)$
      

      后面的 .a.b就是属性名称

  • 格式化json文本,获取内容

    $tc(json, "{'a':1,'b':2}", ".a")$
    
  • 判断

    $if(wg(gv(日历), json, .jq) = null, "")$ 
    
  • 小时中的数字1红色

    $if(
      tc(len, df(hh)) = 1,
        if(
          df(hh) = 1,
            "[c=#FFC5001C]1[/c]",
            df(hh)
        ),
        if(
          tc(cut, df(hh), 0, 1) = 1,
            if(
              tc(cut, df(hh), 1, 2) = 1,
                "[c=#FFC5001C]11[/c]",
                "[c=#FFC5001C]1[/c]" + tc(cut, df(hh), 1, 2)
            ),
            if(
              tc(cut, df(hh), 1, 2) = 1,
                tc(cut, df(hh), 0, 1) + "[c=#FFC5001C]1[/c]",
                df(hh)
            )
        )
    )$
    
  • 分钟末尾0红色

    $if(
      tc(cut, df(mm), 1, 2) = 0,
        tc(cut, df(mm), 0, 1) + "[c=#FFFF0000]0[/c]",
        df(mm)
    )$
    
  • 分钟末尾0 颜色使用环境变量

    $if(
      tc(cut, df(mm), 1, 2) = 0,
        tc(cut, df(mm), 0, 1) + "[c=" + gv(时间标记) + "]0[/c]",
        df(mm)
    )$
    
  • 上下午

    $if(df(h)<12,"上午","下午")$
    

8

主题

116

回帖

0

牛值

fnOS系统内测组

fnOS1.0上线纪念勋章飞牛百度网盘玩家

好东西,留个标记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则