游客们观测到了小球飞鱼在水面上游玩的讯息。

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文介绍了作者利用Codex和GitHub Actions实现从NeoDB到Hugo博客的自动化流程。通过定时脚本拉取NeoDB标记数据,下载海报上传至Cloudflare R2图床,并合并写回本地静态文件,解决了大陆访问问题。整个流程免费,用户只需在NeoDB标记内容,其余自动完成。

🔎

延伸解读

自动化流程的免费额度与成本

文章提到整套流程依赖 Cloudflare R2、GitHub Actions 和 Vercel 的免费额度:R2 提供 10G 存储,GitHub Actions 每月 2000 分钟,Vercel 每月 500 次构建。以作者的数据量,Vercel 构建约 8 秒,GitHub Actions 约 30 秒。API 成本方面,使用 Deepseek v4 flash 约花费 3 元。读者可据此评估自身使用量是否在免费额度内。

大陆访问问题的解决思路

NeoDB 的 API 和海报图片在大陆访问不稳定,作者通过将数据拉取后转为本地静态文件,并将海报上传至 Cloudflare R2 图床,使 Hugo 构建时直接读取本地缓存和图床链接,避免直接访问 NeoDB。这一思路适用于其他依赖海外服务的静态博客,可提升访问速度和稳定性。

脚本设计的几个关键细节

脚本设计中有几个值得注意的点:按 UUID 去重防止重复;多卷本处理需手动干预;手动写入优先逻辑避免自动更新覆盖手动调整;上传图片前检查对象是否存在,失败时回退到原图;单条失败仅警告不中断;GitHub Actions 提交时加 [skip ci] 防止循环触发。这些细节对保证自动化流程的稳定性和数据准确性很重要。

Q&A

如何实现从NeoDB到Hugo博客的自动化同步?

通过编写Python脚本(sync_neodb.py)定时调用NeoDB API拉取标记数据,合并写回本地静态文件(data/neodb/{year}.yaml),并使用GitHub Actions定时运行脚本,有变化时自动提交。Hugo构建时读取本地数据,无需访问外网API。

为什么需要将NeoDB海报上传到Cloudflare R2图床?

因为中国大陆用户无法顺畅访问NeoDB,直接使用其API拉取海报会导致封面无法显示。通过将海报下载后上传至Cloudflare R2图床,并使用图床链接展示,可以解决大陆访问问题。

在同步脚本中,如何避免重复数据?

脚本按UUID去重,而不是按标题,防止索引逻辑出错和封面重复上传。同时,合并写回时按uuid匹配已有条目,只补缺失字段,不覆盖已有内容。

如何处理多卷本(如漫画分卷)的标记?

多卷本情况比较复杂,脚本可能无法自动处理,建议与AI讨论或手动处理。同时,脚本中加入手动写入优先的逻辑,防止自动更新与手动调整冲突。

GitHub Actions中如何防止自动提交触发无限循环?

在自动提交的commit message中加入[skip ci],这样提交不会再次触发workflow,避免循环。

整个自动化流程的成本是多少?

Cloudflare R2 10G内免费,GitHub Actions每月2000分钟免费,Vercel每月500次免费构建。时间成本上,Vercel构建约8秒,GitHub Actions约30秒。API成本(Deepseek v4 flash)约3元。

如果单条数据拉取或图片上传失败,脚本会如何处理?

脚本只输出警告而不中断整个流程,确保单条失败不会卡死整个同步过程。

Hugo短代码如何从本地缓存读取数据?

短代码从URL提取uuid,在.Site.Data.neodb所有年份中查找,找到则渲染卡片,包括封面、标题、日期、动作文案等;未找到时显示占位文案。

🏷️

标签

➡️

继续阅读