1. 背景与痛点
- 公司官网展示的新闻中心的内容更新,原有流程是:后台运营人员在 Halo 系统中发布新闻 → 手动复制到 Excel → 再由开发人员粘贴到前端代码中 → 打包、部署。
- 这个流程不仅繁琐,而且容易出错。由于公司一些限制条件,也无法提供接口
- 于是我设计了一套自动化方案,做到新闻发布后可快速同步到官网。
2. 技术栈与整体架构
- Halo:新闻CMS系统,前端SSR部署,无权限即可访问
- Python:实现数据抓取、写入文件、执行git命令
3.实现步骤
Step 1:抽离新闻数据为 JSON 文件
- 首先,把官网中原本写死在js代码里的 news list 抽离成单独的JSON文件,例如:
public/news/company-news.json
public/news/policy-news.json
- 前端代码不再直接维护新闻数据,而是通过 fetch 请求读取 JSON 文件,动态渲染新闻列表
- 实现了新闻数据与前端代码彻底解耦
Step 2:解决缓存与跨域问题
- 静态 JSON 文件放在 Nginx 的静态资源目录下。
- 遇到的两个问题是:缓存问题(浏览器会缓存旧的 JSON 文件),跨域问题(请求跨域 JSON 导致)
- 解决方案:在 Nginx 配置中增加:
location /news/ {
add_header Cache-Control no-cache;
add_header Pragma no-cache;
add_header Expires 0;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, OPTIONS';
add_header Access-Control-Allow-Headers 'Content-Type';
}
Step 3:新闻抽取脚本
- 原本打算通过 Halo API 获取新闻数据,但需要登录和权限配置,需服务放开权限,比较复杂。
- 因此我改用抓取新闻页面 DOM 节点的方式来生成 JSON 文件。
核心逻辑:
· 请求新闻列表的HTML页面
· 解析 HTML DOM,抽取标题、时间、摘要、链接等为json数据
// 数据结构
{
"id": "20250828",
"title": "保函业务监管新规动态追踪",
"date": "2025-08-28",
"detail": "2025年8月28日上午,公司主要领导在北京职场接待了...",
"link": "https://www.jinhanwang.cn/#/newsinfo"
}
Step 4:发布项目
- python脚本实现,复制json到下项目目录
- python脚本实现,实现git提交、发布
Step 5:自动化触发更新
- 当后台人员通知有新闻更新时,我运行 Python 脚本,新闻就会同步到静态文件git库中
- jenkins发布 -> 完成!
当然,还可以有更自动化的方案:
1:配置 CI/CD 流水线,静态文件git库有提交,自动触发发布
2:Halo 如果支持 Webhook,可以在新闻发布时自动通知脚本执行更新
这样就什么也不用做了
4.总结
- 通过这一系列改造,把新闻同步流程从“手工操作”优化为“自动化脚本执行”,显著减少了出错率,也节省了时间、人员成本