Songloft 插件:播放统计

July 9, 2026 · View on GitHub

一个用于 Songloft 的播放数据统计插件。自动记录播放完成事件,提供播放次数、听歌时长、不同歌曲/艺术家等概览,以及排行榜、趋势、时段分布等可视化统计;并支持定时推送日报、WebDAV 备份与恢复。

特性

  • 播放记录:订阅播放完成事件(finish)自动记录,内置去重机制(同一首歌在窗口内重复播放不重复计数)。
  • 统计概览:今日 / 本周 / 本月 / 全部 四个时间范围,展示播放次数、听歌时长、不同歌曲、不同艺术家。
  • 排行榜:热门艺术家、热门歌曲、热门专辑 Top 排行。
  • 趋势与分布:按天的播放趋势柱状图、一天 24 小时播放时段分布。
  • 最近播放:最近播放历史列表,支持加载更多。
  • 定时推送:每日定时将昨日统计摘要推送到 飞书 / WxPusher(两平台共用一个推送时间)。
  • WebDAV 备份:将播放历史备份到 WebDAV 服务器,并支持从服务器下载备份文件导入恢复。

使用说明

安装与开发

# 安装依赖
npm install

# 编译构建(生成 dist/stats.jsplugin.zip)
npm run build

# 验证插件
npm run validate

dist/stats.jsplugin.zip 上传到 Songloft 即可使用。

目录结构

songloft-plugin-demo/
├── plugin.json              # 插件元数据(名称、入口、权限、哈希)
├── package.json             # 构建 / 验证脚本
├── tsconfig.json            # TypeScript 配置
├── manifest.json            # 更新清单
├── src/
│   ├── main.ts              # 生命周期入口(onInit / onDeinit / onHTTPRequest)
│   ├── router.ts            # HTTP 路由注册(/api/*)
│   ├── store.ts             # 播放历史存储与增量聚合
│   ├── aggregator.ts        # 统计计算(概览 / 趋势 / 时段分布)
│   ├── scheduler.ts         # 定时推送与定时备份调度
│   ├── pusher.ts            # 飞书 / WxPusher 推送实现
│   ├── webdav.ts            # WebDAV 连接 / 列举 / 上传 / 下载
│   ├── push/config.ts       # 推送配置与定时(全局共用时间)
│   ├── backup/config.ts     # WebDAV 备份配置与定时
│   └── types.ts             # 类型定义
├── static/
│   ├── index.html           # 前端页面(MD3 外壳 + 统计/设置 Tab)
│   ├── js/app.js            # 前端业务逻辑
│   └── css/style.css        # 组件样式(引用 --md-* 变量)
└── dist/                    # 构建产物

API 一览

插件通过 onHTTPRequest 暴露以下接口(路径均经 /jsplugin/stats 前缀路由,前端使用 SongloftPlugin.apiGet/apiPost 调用):

方法路径说明
GET/api/stats/summary指定时间范围的统计概览
GET/api/stats/trends按天播放趋势
GET/api/stats/hourly24 小时时段分布
GET/api/history/list最近播放历史(分页)
GET/POST/api/history/export /api/history/import导出 / 导入历史
GET/POST/api/settings读取 / 保存设置(最大历史条数等)
GET/POST/api/push/config推送平台配置
GET/POST/api/push/schedule定时推送配置(全局共用时间)
POST/api/push/trigger手动触发推送(测试)
GET/POST/api/backup/webdav/configWebDAV 备份配置(增删改查)
GET/api/backup/webdav/list列举服务器备份文件
POST/api/backup/webdav/upload上传备份
POST/api/backup/webdav/download下载备份并导入
GET/POST/api/backup/schedule定时备份配置

路径与字段以插件实际代码为准。