Files
lunar-mini/server/internal/model/wiki.go
T
gouki fec383f257
Publish Mini Program Dev Version / publish (push) Successful in 1m12s
Build and Publish Server / build (push) Successful in 8m24s
feat(wiki): 二十四节气详情抓取百度百科并图文展示
数据源:百度百科开放接口 BaikeLemmaCardApi(无反爬,返回结构化 JSON)
与「历史上的今天」(维基)完全解耦,维基代码原样保留可随时恢复:

服务端:
- WikiEntry 增加 image(配图)和 extra(结构化字段 JSON)字段
- 新建 BaikeTermSyncLog 独立日志表(不污染维基 WikiSyncLog)
- 新建 BaikeTermSyncService 独立同步服务(24 节气,间隔 1.2s)
- 启动时缺详情自动补齐,之后按配置间隔定时增量刷新
- 管理 API:GET/POST /admin/api/wiki/term-sync*

管理后台:
- 百科条目 Tab 顶部加节气同步卡片(X/24 + 状态 + 同步按钮)
- 条目编辑器加配图 URL(含预览)和节气扩展字段编辑

小程序:
- 百科页展开详情图文展示:配图 + 简介 + 物候/习俗/养生等分块

本地验证:24/24 节气抓取成功,image/extra 全部填充,维基数据不受影响
2026-08-13 00:31:43 +00:00

45 lines
2.4 KiB
Go

package model
import (
"time"
)
// WikiEntry 百科条目(小程序百科页,可在管理后台维护)
type WikiEntry struct {
ID uint `gorm:"primaryKey" json:"id"`
Category string `gorm:"size:30;index" json:"category"` // term:节气 lunarFest:农历节日 solarFest:公历节日 ganzhi:干支生肖 termExplain:黄历术语 other:其他
Title string `gorm:"size:50" json:"title"`
Brief string `gorm:"size:255" json:"brief"` // 简介(列表折叠时显示)
Content string `gorm:"type:text" json:"content"` // 详细内容(展开后显示)
Image string `gorm:"size:255" json:"image"` // 配图 URL(节气等条目的配图)
Extra string `gorm:"type:text" json:"extra"` // 扩展字段 JSON(节气:别名/外文名/物候/习俗/养生等)
Sort int `gorm:"default:0" json:"sort"`
Status int `gorm:"default:1" json:"status"` // 1:显示 0:隐藏
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// WikiOnThisDay 历史上的今天(数据来源:中文维基百科)
type WikiOnThisDay struct {
ID uint `gorm:"primaryKey" json:"id"`
Month int `gorm:"index:idx_otd_day" json:"month"` // 1-12
Day int `gorm:"index:idx_otd_day" json:"day"` // 1-31
Kind string `gorm:"size:20;index:idx_otd_day" json:"kind"` // event:大事记 birth:出生 death:逝世 festival:节假日习俗
Year int `json:"year"` // 0:年份不详,负数:公元前
Content string `gorm:"type:text" json:"content"`
Status int `gorm:"default:1" json:"status"`
}
// WikiSyncLog 维基百科同步日志
type WikiSyncLog struct {
ID uint `gorm:"primaryKey" json:"id"`
Trigger string `gorm:"size:20" json:"trigger"` // startup:schema自动 cron:定时任务 admin:手动
Status string `gorm:"size:20" json:"status"` // running:进行中 success:成功 partial:部分失败 failed:失败
Pages int `json:"pages"` // 总页数
Success int `json:"success"` // 成功页数
Failed int `json:"failed"` // 失败页数
Error string `gorm:"size:500" json:"error"`
StartedAt time.Time `json:"startedAt"`
FinishedAt *time.Time `json:"finishedAt"` // 同步完成时间,进行中为 NULL
}