从紧张麻木到闲适摸鱼:我用 Cloudflare Worker 搭建了新闻助手

313 阅读4分钟

一、被信息洪流追赶的早晨

每天清晨打开手机,工作群的消息已经炸锅,打开新闻App满屏推送让人眼花缭乱——作为互联网行业的打工人,我需要快速掌握行业动态。但是程序员懒,手动去找新闻不是我们的风格。

一个想法在脑海浮现:能不能做一个自动推送工具,每天定时把精选新闻发到飞书群,还能按需触发趣味内容?技术选型很快确定:

  • Cloudflare Worker:免费的边缘计算平台,支持定时任务和HTTP监听,完美契合"轻量自动化"需求
  • AlAPI:提供每日免费次数的API,数据格式规范且响应迅速
  • 飞书Webhook机器人:企业协作标配,支持富文本卡片和按钮交互

二、从0到1:搭建自动化管道的三个核心步骤

1. 打通数据接口:让工具学会"读新闻"

首先在AlAPI官网注册,获取新闻接口/zaobao的调用权限。这两个接口都需要Token认证,我们需要把密钥记在小本本上,稍后会用到。

接下来在飞书管理后台创建自定义机器人,复制生成的Webhook URL。这个URL就像机器人的"收件地址",所有要发送的消息都需要通过POST请求推送到这里。

2. 编写核心逻辑:让Worker成为调度中心

Cloudflare Worker的代码结构很清晰,scheduled函数处理定时任务,fetch函数响应HTTP请求。我先实现了最核心的新闻推送流程:

// 定时任务:每天8点触发新闻推送
async function scheduled(event, env, ctx) {
  await handleNews(env); // 处理新闻逻辑
}

// 处理新闻的完整流程
async function handleNews(env) {
  const news = await getAlapiNews(env.ALAPI_TOKEN); // 从AlAPI获取新闻
  const feishuMsg = buildFeishuMessage(news); // 构建飞书卡片
  await sendToFeishu(env.FEISHU_WEBHOOK, feishuMsg); // 发送到飞书
}

这里遇到第一个挑战:AlAPI的新闻接口返回的数据,应该怎么才能返回到飞书呢。我花了半个小时研究飞书开放文档,终于写出了buildFeishuMessage函数,把新闻内容转化为带标题、正文和交互按钮的富文本卡片:

function buildFeishuMessage(apiData) {
  return {
    msg_type: "interactive", // 交互卡片类型
    card: {
      header: { title: { content: "今日新闻速递", tag: "plain_text" } },
      elements: [
        { // 新闻正文
          tag: "div",
          text: { content: `📰 **每日新闻**\n\n${apiData.news.join("\n\n")}`, tag: "lark_md" }
        },
        { // 交互按钮区
          tag: "action",
          actions: [
            { // 跳转按钮
              tag: "button", text: { content: "更多讯息", tag: "plain_text" },
              type: "primary", url: "https://news.example.com"
            }
          ]
        }
      ]
    }
  };
}
3. 部署与调试:在边缘服务器上跑通流程

在Cloudflare Dashboard创建Worker,把代码粘贴进去,别忘了在环境变量里配置ALAPI_TOKENFEISHU_WEBHOOK。开启定时任务只需要在Worker设置里添加Cron表达式0 8 * * *(每天8点执行,注意时区哦)。

第一次部署时踩了个大坑:飞书机器人一直收不到消息。通过Worker的日志打印发现,原来sendToFeishu函数里把飞书响应的状态码写成了StatusCode,而实际返回的是Code。这个低级错误让我学会了:调试时一定要打印原始响应数据

三、从代码到生产力:这个工具带来了什么?

  • 时间效率:每天节省15分钟筛选新闻的时间,推送准时出现在早餐时段
  • 团队协作:飞书卡片的交互按钮让工具更易用,非技术同事也能轻松触发功能
  • 扩展性:基于Cloudflare Worker的事件模型,未来可以轻松添加天气提醒、会议通知等功能。

四、小贴士

  1. 日志为王:在关键节点添加console.log,Cloudflare Dashboard的日志查询功能非常强大
  2. 分步测试:先单独调试API调用,再整合消息构建,最后测试完整流程
  3. 飞书卡片:使(使用自定义机器人发送飞书卡片 - 开发指南 - 开发文档 - 飞书开放平台)参照如何配置机器人输出内容
  4. 环境变量:尽量不要在代码中硬编码密钥,通过Worker的环境变量管理敏感信息

结语:让代码成为生活的温柔助力

制作这样一个小工具提醒了我:技术的终极价值不是炫技,而是让生活更加便利。刚入行时对着键盘踌躇满志的自己,在日复一日的需求文档与调试日志中渐渐模糊,甚至开始怀疑:那些在屏幕前熬红的夜晚,究竟是出于热爱,还是惯性?自己是真的喜欢计算机么?

现在当每天早晨看到飞书群准时出现的新闻卡,我突然意识到:我们写的不是代码,而是热爱。那些曾经以为被工作冲淡的热爱,其实早已融入每个追求便捷的细节里。一个小工具只是为了在平淡的日子里增添一份乐趣。生活可以慢一点,多给自己一点时间