数据源:百度百科开放接口 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 全部填充,维基数据不受影响
45 lines
2.4 KiB
Go
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
|
|
}
|