halo-plugin-publication
用于统计月度发布详情
v1.4.1补丁
- 链接拼接字段可在控制台配置
- 修改奇遇默认路由为/stories
v1.4.1
- 修正朋友圈媒体信息异常
- 移除冗余字段
- 补充瞬间返回类型
v1.4.0
- 新增标签、类别等更多数据返回
v1.3.0
- 增加豆瓣、奇遇、类型筛选和缓存
发布日历 API
Halo 2.21 插件,按月聚合以下公开发布记录:
- 图库:
Photo.metadata.creationTimestamp - 朋友圈:
FriendPost.spec.pubDate - 瞬间:
Moment.spec.releaseTime,仅返回已审核的公开瞬间 - 文章:
Post.spec.publishTime,仅返回已发布且公开的文章 - 豆瓣:
DoubanMovie.faves.createTime,包含所有类别和状态的豆瓣记录 - 奇遇:
Equipment.metadata.creationTimestamp
图库和奇遇模型没有单独的发布时间,因此使用资源创建时间作为发布日期。图库、
朋友圈、瞬间、豆瓣和装备插件均为可选依赖;未安装或未启用时,API 仍可正常返回
其他数据,并通过 sources 标记可用状态。
API
GET /apis/api.publication-calendar.anian.dev/v1alpha1/publications
查询参数:
month:可选,格式yyyy-MM;默认当前月timezone:可选,IANA 时区;默认 Halo 服务端时区types:可选,按逗号分隔的顶层类别,例如photos,friends,douban;默认返回全部类别
示例:
curl 'https://example.com/apis/api.publication-calendar.anian.dev/v1alpha1/publications?month=2026-07&timezone=Asia%2FShanghai'
只查询图库和朋友圈:
curl 'https://example.com/apis/api.publication-calendar.anian.dev/v1alpha1/publications?month=2026-07&types=photos,friends'
响应结构示意:
{
"month": "2026-07",
"timezone": "Asia/Shanghai",
"start": "2026-07-01T00:00:00",
"endExclusive": "2026-08-01T00:00:00",
"total": 2,
"counts": {
"photos": 1,
"friends": 1,
"moments": 0,
"posts": 1,
"douban": 1,
"equipments": 1
},
"dailyCounts": {
"photos": [0, 1, 0],
"friends": [1, 0, 0],
"moments": [0, 0, 0],
"posts": [0, 0, 1],
"douban": [0, 1, 0],
"equipments": [0, 0, 1]
},
"sources": {
"photos": true,
"friends": true,
"moments": true,
"posts": true,
"douban": true,
"equipments": true
},
"items": [
{
"day": 1,
"date": "2026-07-01",
"photos": [],
"friends": [
{
"type": "FRIEND",
"name": "friend-post-name",
"date": "2026-07-01T13:20:00",
"link": "/friends/friend-post-name",
"author": "作者名称",
"title": "动态标题",
"media": [
{
"type": "PHOTO",
"url": "/upload/image-hots/image-1.jpg"
},
{
"type": "PHOTO",
"url": "/upload/image-hots/image-2.jpg"
}
],
"categories": [],
"tags": []
}
],
"moments": [],
"posts": [],
"douban": [],
"equipments": []
}
]
}
实际的 dailyCounts 和 items 数组长度等于当月天数。items[0] 表示 1 日,
每一天内部按 photos、friends、moments、posts、douban、equipments
分类,分类中的内容按 date 倒序排列,date 为请求 timezone 下的本地日期时间。
课外书链接为 /books/{name},
奇遇链接为 /stories/{name}。所有 link 和媒体 URL 均返回相对地址。API 已聚合
至 Halo 匿名角色,无需登录即可访问,因此只会输出公开内容。
链接前缀
在 Halo 控制台的插件设置中,可分别配置图库、朋友圈、课外书和奇遇的链接前缀。
填写的前缀优先级最高,接口会在其后拼接资源的 {name};留空则沿用原有路径规则。前缀可
以或不以 / 开头,尾部 / 会自动忽略,返回值始终为相对地址。日记仍优先使用资源自身
的 status.permalink,仅在该字段缺失时使用 /moments/{name}。
每个条目的 categories 和 tags 都是数组:图库和奇遇来自对应分组的中文显示名称,
文章根据 Post.spec.categories 和 Post.spec.tags 中的英文名称,分别查询 Category 和 Tag
资源并返回对应的 spec.displayName 中文名称;豆瓣类别直接取 spec.type,
日记标签使用日记自身的标签文本。奇遇、豆瓣和文章不返回媒体;朋友圈媒体由 imageFiles
按英文逗号拆分生成,图片 URL 为 /upload/image-hots/{图片名称};日记媒体根据 URL 后缀
识别为 PHOTO 或 VIDEO,媒体数量可直接由前端统计。
缓存
在插件设置中配置缓存时间,单位为分钟,默认值为 10。缓存按月份、时区、内容类型和链接
前缀分别保存;设置为 0 时关闭缓存,每次请求都会重新查询数据。修改链接前缀后会自动
使用独立的缓存结果,无需等待旧缓存过期。
构建
./gradlew clean build
构建产物位于 build/libs/plugin-publication-calendar-1.4.0.jar。