Halo 新闻同步到公司官网的自动化方案

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.总结

  • 通过这一系列改造,把新闻同步流程从“手工操作”优化为“自动化脚本执行”,显著减少了出错率,也节省了时间、人员成本
posted @ 2025-09-10 10:37  卷叶小树  阅读(34)  评论(0)    收藏  举报