核心摘要
这是一个可自定义的 GitHub Action 工作流,通过 cURL、jq 和 Twilio 工具,当网页或 API 响应发生变更时,以短信形式向你发送通知。
配置步骤(Setup)
若要配置 “变更通知”(notify-on-changes)GitHub Action,以监控你指定的 API 或网页响应变更,请遵循以下步骤:
-
将下方代码片段保存为 YAML 文件,并放入 GitHub 仓库的
.github/workflows/文件夹中(例如,保存为.github/workflows/check.yml),公开仓库或私有仓库均可。 -
将占位符
<URL YOU WANT TO CHECK HERE>替换为你要监控的实际 API 端点或网页 URL。² -
若需解析 JSON 响应,以便在通知中包含响应中的特定字段,可修改
jq查询语句;若无需解析,可直接删除 “Parse data”(解析数据)步骤。 -
若使用 Twilio 接收短信通知,请按照配置说明操作,将密钥和电话号码保存为仓库 “密钥”(secrets),并根据你的使用场景自定义短信内容;若使用其他通知方式,只需将 “Notify if data has changed”(数据变更时通知)步骤替换为你所需的通知机制即可。³
-
提交代码后,每当 API 或网页响应发生变更,你都会自动收到通知。
示例工作流(Example workflow)
以下是我使用的完整工作流注释版 YAML 代码:
on:
schedule:
# 每小时整点运行一次,可自定义为最短每 5 分钟检查一次
- cron: '0 * * * *'
name: Check for changes
jobs:
check:
runs-on: ubuntu-latest
steps:
# 使用 cURL 获取指定 URL,并将响应保存为 data.json
- name: Fetch data
run: curl "<URL YOU WANT TO CHECK HERE>" -o data.json
# 可选:使用 jq 从 JSON 中提取字段,以便在短信中展示
- name: Parse data
id: parse_data
run: echo '::set-output name=someField::'$(jq -r '.someField' data.json)
# 通过响应内容的哈希值作为缓存键,与上一次运行结果比对
- name: Fetch Cache
id: cache
uses: actions/cache@v2
with:
path: data.json
key: ${{ hashFiles('data.json') }}
# 若缓存未命中(即响应内容有变化),则通过短信通知
# 详见 https://github.com/twilio-labs/actions-sms 获取配置说明
# 也可替换为其他通知方式,但需保留下方的 if 条件
- name: Notify if data has changed
uses: twilio-labs/actions-sms@v1
if: steps.cache.outputs.cache-hit != 'true'
env:
TWILIO_ACCOUNT_SID: ${{ secrets.TWILIO_ACCOUNT_SID }}
TWILIO_API_KEY: ${{ secrets.TWILIO_API_KEY }}
TWILIO_API_SECRET: ${{ secrets.TWILIO_API_SECRET }}
with:
fromPhoneNumber: ${{ secrets.from_phone }}
toPhoneNumber: ${{ secrets.to_phone }}
message: "There's been a change! someField is now ${{ steps.parse_data.outputs.someField }}."
结语(Conclusion)
监控需鉴权的接口时,把 API 密钥存为仓库 secret 即可,勿硬编码。
若使用其他通知机制,请务必保留 if: steps.cache.outputs.cache-hit != 'true' 这个条件判断,确保仅在响应内容变更时才发送通知。