GitHub Actions 定时任务:用 Python 更新个人项目
用定时工作流运行 Python 脚本,生成数据并提交到仓库,记录权限与异常处理要点。
阅读设置
核心目标:利用 GitHub Actions 定时生成和更新有实际用途的项目数据。 技术栈:GitHub Actions (CI/CD) + Python + Git
一、 核心原理 (The Mechanism)
不是简单的“刷量”,而是利用 CI/CD 流程完成“定时任务”。
- Trigger (触发):Cron 定时器 (
0 8 * * *) 唤醒 GitHub 服务器。 - Runner (环境):GitHub 启动一台 Ubuntu 虚拟机。
- Execute (执行):运行 Python 脚本(API 抓取、数据处理、文件生成)。
- Push (回传):脚本以你的身份将变更(修改 README、保存图片/数据)提交回仓库。
- Result (结果):生成内容更新;是否计入贡献图取决于提交邮箱、目标分支等 GitHub 规则。
二、 标准工程结构 (SOP)
最小示例可从这 3 个核心文件开始:
1. 依赖文件 requirements.txt
requests
## 其他库:playwright, numpy, pillow 等按需添加
2. 业务脚本 main.py (或其他命名)
负责核心逻辑。关键是要处理好文件路径和异常捕获。
3. 自动化配置 .github/workflows/run.yml
工作流示例(依赖版本与产出路径需按项目调整):
name: Auto Task Name # 任务名称
on:
schedule:
- cron: '0 0 * * *' # UTC时间0点(北京时间8点)
workflow_dispatch: # 允许手动触发
permissions:
contents: write # 必须开启写入权限
jobs:
run_task:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # 1. 拉取代码
- uses: actions/setup-python@v4 # 2. 装Python
with:
python-version: '3.x'
- run: pip install -r requirements.txt # 3. 装依赖
- name: Run Script
run: python main.py # 4. 跑脚本
- name: Commit & Push # 5. 提交结果
run: |
# ⚠️ 关键:邮箱必须和 GitHub 账号一致
git config --global user.email "你的邮箱@example.com"
git config --global user.name "你的用户名"
# 只暂存预期产物,脚本应先生成它们
git add README.md data/
# 防空提交报错
git diff --quiet && git diff --staged --quiet || (git commit -m "🤖 Auto update: $(date +'%Y-%m-%d')" && git push)
三、 精选实战方案库 (Projects Catalog)
可以将以下方案拆分为不同仓库,或整合在一个仓库的不同 Workflow 中。
1. 📊 个人仪表盘 (Personal Dashboard)
- 功能:每天更新天气、Hacker News 热点、每日名言。
- 特点:适合放在 Profile 仓库 (
username/username)。 - 核心库:
requests - API 资源:
- 天气:
wttr.in(图片直链) - 新闻:
hacker-news.firebaseio.com - 名言:
api.quotable.io
- 天气:
2. 💰 虚拟量化交易员 (Paper Trader)
- 功能:初始 $10,000 资金,每日根据 BTC 价格自动买卖,记录盈亏。
- 特点:硬核技术展示,生成 CSV 交易流水和收益率报表。
- 关键逻辑:
- 若
current < last * 0.98-> 买入 (Buy Dip) - 若
current > last * 1.02-> 卖出 (Take Profit) - 注意:要在脚本开头强制创建
data/文件夹。
- 若
3. 🚦 网站宕机监控 (Uptime Monitor)
- 功能:每 6 小时 Ping 关注的网站(Google, Blog, API)。
- 特点:Serverless 监控,生成状态表格。
- 核心库:
requests(检测 status_code 是否为 200)。
4. 📘 自动背单词 (Vocabulary Builder)
- 功能:每日抓取金山词霸/扇贝单词,更新 Markdown 并归档历史。
- 特点:结合 Issues 功能打卡,展现学习态度。
5. 🖼️ Bing 壁纸归档 (Wallpaper Archive)
- 功能:每日下载 Bing 高清壁纸,按月归档。
- 特点:视觉效果极佳,仓库体积会随时间增长,变成图库。
- API:
bing.com/HPImageArchive.aspx
6. 🎮 Epic 喜加一提醒 (Game Notifier)
- 功能:每周五检测 Epic 商城免费游戏。
- 特点:实用工具,薅羊毛神器。
7. 📸 网页时光机 (Web Time Machine)
- 功能:每日对指定网站(如 Apple 官网)截图保存。
- 核心库:
playwright(需要playwright install步骤)。
四、 避坑指南 (Troubleshooting)
在实操中容易遇到的报错及解决方案:
- 错误:
pathspec 'data/' did not match any files- 原因:脚本因网络错误未运行成功,导致
data/文件夹未生成,git add data/找不到目标。 - 解法:
- Python 脚本中优先执行
os.makedirs("data")。 - 检查脚本退出状态和输出文件,只有产物存在时才暂存指定路径。
- Python 脚本中优先执行
- 原因:脚本因网络错误未运行成功,导致
- 错误:绿格子没亮
- 原因:
git config中的邮箱与 GitHub 账户不匹配。 - 解法:检查 Settings -> Emails,确保 YML 中的
user.email一字不差。
- 原因:
- 错误:Permission denied (403)
- 原因:Action 没有写入仓库的权限。
- 解法:仓库 Settings -> Actions -> General -> Workflow permissions -> 勾选 Read and write permissions。
- 技巧:如何不想要很多 Commit 记录?
- 解法:可以使用
git commit --amend强推(不推荐,容易丢数据),或者利用 GitHub Action 的 Artifacts 只存数据不提交代码(但这不会亮绿格子)。推荐保持现状,真实的 Commit 也是一种记录。
- 解法:可以使用
五、 进阶技术路线图 (Roadmap)
当你玩腻了简单的 API 调用,可以向以下方向深挖:
- AI Agent (智能体)
- 接入 DeepSeek/OpenAI API,让脚本具备“点评”能力(如:AI 点评今日新闻、AI 分析股价情绪)。
- 逆向工程 (Reverse Engineering)
- 使用
Playwright或Mitmproxy抓取有反爬策略的动态网页数据。
- 使用
- HomeLab (家庭实验室)
- 从云端转入本地,利用 Docker + DDNS 搭建私有服务(如 Home Assistant, NAS)。
- Web3 开发
- 研究 Solidity,编写链上套利机器人或发币合约。
调度边界
示例 schedule 使用 UTC,任务可能延迟,不适合严格实时调度。权限应仅给需要写入仓库的任务;提交邮箱不必公开真实邮箱,可使用匹配账号的隐私邮箱。外部 API、配额与素材使用范围需要分别确认。