微信公众号文章获取/
├── api/
│ └── index.py # FastAPI 主应用,所有API入口
├── test_api2.ipynb # Jupyter Notebook 示例(本地开发用,已被 .gitignore 忽略)
├── requirements.txt # Python 依赖
├── Pipfile # Python 环境配置(可选)
├── vercel.json # Vercel 路由配置
├── .gitignore # Git 忽略文件
注意:
test_api2.ipynb仅用于本地开发和调试,已在.gitignore中配置,不会上传到 GitHub。
- 直接导出
app变量,Vercel 自动识别为 ASGI 应用。 - 提供
/路由用于获取微信公众号草稿箱文章列表。 - 支持 offset/count 分页参数。
- 依赖环境变量
APPID和APPSecret,本地可用.env文件,线上用 Vercel 环境变量。
requirements.txt只需:fastapi==0.104.1 requests python-dotenvPipfile便于本地开发和 Vercel 自动检测。
- 所有请求都路由到
api/index.py,由 FastAPI 应用分发。{ "routes": [ { "src": "/(.*)", "dest": "api/index.py" } ] }
- 初始化 Git 仓库并推送到 GitHub:
git init git add . git commit -m "init: wechat article api" git remote add origin https://github.com/your-username/your-repo.git git push -u origin main
- 在 Vercel 选择 Import Project,关联 GitHub 仓库。
- 设置环境变量
APPID和APPSecret。
- 安装 Vercel CLI:
npm install -g vercel
- 登录 Vercel:
vercel login
- 部署:
vercel
- 设置环境变量(可在 Vercel 控制台设置)。
- 安装依赖:
pip install -r requirements.txt
- 本地运行:
uvicorn api.index:app --reload
- 访问
http://localhost:8000/测试 API。
- Vercel 的 Serverless Functions IP 是动态的,官方没有固定出口 IP 列表。
- 你可以通过微信接口报错信息中的 IP(如
34.235.166.164)临时加入白名单,但这不是长久之计,因为 IP 可能会变。 - Vercel 官方说明:Vercel 不保证 IP 固定,生产环境建议用自有服务器代理。
- 生产环境推荐:用自己的云服务器做代理,服务器 IP 固定,将其加入白名单,然后由服务器转发请求到 Vercel。
- 只需
fastapi、requests、python-dotenv。 - 避免多余依赖,确保 requirements.txt 格式正确。
- 本地开发用
.env文件,线上用 Vercel 环境变量。 - 缺少
APPID或APPSecret会启动报错。
- 只保留
api/index.py作为主入口,vercel.json 路由所有请求到此文件。 - 不需要 handler、Mangum、builds 配置。
- ModuleNotFoundError: No module named 'fastapi'
- 检查 requirements.txt 是否包含 fastapi
- issubclass() arg 1 must be a class
- 不要定义 handler = Mangum(app),直接导出 app
- Vercel 构建警告
- 删除 vercel.json 中的 builds 配置,只保留 routes
- 环境变量未生效
- 本地用 .env,线上在 Vercel 控制台设置
- 只保留 test_api2.ipynb 作为 Notebook 示例,其余测试脚本可删除
.gitignore已包含 test_api2.ipynb、.env、pycache、.vercel 等
本项目结构极简,适合 Vercel Serverless 部署,支持微信公众号草稿箱文章的 API 获取。遇到问题请优先检查依赖、环境变量和 vercel.json 配置。