飞书多维表格 + Github Action = 播客?

2025-02-22
#python #github action #稍后阅读 #tts

通过飞书多维表格的自动化将收藏的文章再加工一次,将昨天收藏的文章借由 AI 去总结成一个简短的 5 分钟左右的文章,然后同时将总结的文章转成语音的形式,这样子就可以在碎片化的时间将收藏的文章简单的通读一遍了。

整体的流程图如下:

飞书多维表格 + Github Action = 播客? 流程图

通过多维表格去触发 GitHub Action ,然后在 GitHub Action 里完成文字转语音的流程,接着将完成的音频文件推送到群组中去。

多维表格

自动化流程

在飞书的多维表格自动化流程中完成数据的预处理,包含四个步骤:

  1. 定时任务,每天定时 8 点钟
  2. 查找保持在数据表中 日期 == 昨天 && 是否生成日报 == ✅ 的所有总结
  3. 有记录则继续,否则停止
  4. 通过 AI 对查找到的所有记录总结成一篇日报
  5. 将总结的日报内容 News 通过 Http 的请求方式推送到 Github Action 下

AI 总结 Prompt

其中 4 中使用到的 prompt 如下:

# 角色

你是一位经验丰富的技术领域文稿撰写人员,能够根据给定的总结信息生成一篇时长在 5 分钟之内的新闻早报文稿。

## 技能

6. 精准提炼给定总结中的关键信息。

7. 围绕关键信息组织连贯、生动且符合新闻早报风格的内容。

8. 合理控制文稿篇幅,确保播报时长在 5 分钟之内。

9. 按照 markdown 格式撰写文稿,准确处理原文链接。

## 限制

- 文稿内容必须基于给定的总结信息展开。

- 文稿播报时长严格控制在 5 分钟之内。

- 语言风格符合新闻早报的严谨性和时效性。

- 文稿格式应当为 markdown 格式

- 篇幅控制在 1024 个字符之内。

## 用户要求

请根据以下总结,生成一篇时长在 5 分钟之内的新闻早报文稿:

[查找到的所有记录]

Http 请求

其中 5 通过 Http 请求触发对应的 repo 的 workflow:

curl -X POST \                      
  https://api.github.com/repos/{username}/{repo}/actions/workflows/{workflow-id}/dispatches \
  -H "Accept: application/vnd.github.v3+json" \
  -H "Authorization: Bearer {token}" \ # 自行申请的 token
  -d '{
    "ref": "master", # branch 名称
    "inputs": {
      "news": "" # 总结的内容
    }
  }'

其中需要获取到对应的 workflow id,可以通过下面的方式获取

 curl https://api.github.com/repos/{username}/{repo}/actions/workflows -H "Authorization: Bearer {token}" # change to your config

所需的 token 需要从 🔗 申请,为了确保对应的 workflow 可以接受参数,我们也需要对代码仓库下的 workflow 进行修改。

Github Action

workflow

on:
  workflow_dispatch:
    inputs:
      news:
        description: 'Yesterday News Summary'
        required: true
        type: string

...
python what-i-read-yesterday.py "${{ inputs.news }}"

重点是在 workflow 的文件里的 inputs 下需要接受的参数,然后在后续通过 ${{ inputs.news }} 去使用这个参数了。

tts

通过 edge-tts 这个库将文字转成对应的音频文件

import edge_tts
import datetime
import pytz

VOICE = "zh-CN-XiaoxiaoNeural" # 音色

def generate_voice(text:str):
	...
	today_voice_path = '' # 文件位置
	communicate = edge_tts.Communicate(text, VOICE)
	communicate.save_sync(today_voice_path)
	return today_voice_path

最后

最后将音频文件和总结的文字内容一起推送到群组中去。

群组消息

完整代码在: discussion-blog

最后音频文件和总结可以在 或者 播客 里听到