将百家号 Python 后端从浏览器自动化改为直接 HTTP API 调用,提升性能和可靠性。
server/python/platforms/baijiahao.pyget_account_info 方法 - 获取账号信息修改前:使用 Playwright 浏览器访问后台页面,通过 JavaScript 调用 API
修改后:使用 aiohttp 直接调用 HTTP API
API 调用顺序:
https://baijiahao.baidu.com/builder/app/appinfo - 获取账号基本信息
https://baijiahao.baidu.com/cms-ui/rights/growth/get_info - 获取粉丝数(非关键)https://baijiahao.baidu.com/pcui/article/lists?start=0&count=1 - 获取作品总数(非关键)错误处理:
errno === 0 且有用户数据 = 成功errno === 110 = 未登录,Cookie 失效errno !== 0 = 其他错误,Cookie 可能失效性能提升:
get_works 方法 - 获取作品列表修改前:使用 Playwright 浏览器访问内容管理页面,通过 JavaScript 调用 API
修改后:使用 aiohttp 直接调用 HTTP API
API:
https://baijiahao.baidu.com/pcui/article/lists?start={start}&count={page_size}&article_type=video参数:
start: 起始位置(page * page_size)count: 每页数量article_type=video: 只获取视频类型返回数据:
check_login_status 方法 - 检查登录状态(新增)功能:覆盖基类的浏览器检查方法,使用 API 检查
API:
https://baijiahao.baidu.com/builder/app/appinfo判断逻辑:
errno === 0 且有用户数据且状态正常 = 登录有效errno === 110 = 未登录errno !== 0 = Cookie 失效返回格式:
{
"success": True,
"valid": True/False, # Cookie 是否有效
"need_login": False/True, # 是否需要重新登录
"message": "状态描述"
}
aiohttp - 异步 HTTP 客户端# 解析 cookies
cookie_list = self.parse_cookies(cookies)
cookie_str = '; '.join([f"{c['name']}={c['value']}" for c in cookie_list])
headers = {
'Accept': 'application/json, text/plain, */*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Cookie': cookie_str,
'Referer': 'https://baijiahao.baidu.com/builder/rc/home'
}
// 开头,需要添加 https: 前缀AccountService.refreshAccount()platformsSkipAI 包含 baijiahao,跳过 AI 刷新HeadlessBrowserService.checkCookieValid()/check_login 接口BaijiahaoPublisher.check_login_status() - 使用 APIHeadlessBrowserService.fetchAccountInfo()platform === 'baijiahao',调用 fetchBaijiahaoAccountInfoDirectApi() - 使用 API/account_info 接口BaijiahaoPublisher.get_account_info() - 使用 API/works 接口BaijiahaoPublisher.get_works() - 使用 API# 启动 Python 服务
cd server/python
python app.py
curl -X POST http://localhost:5001/account_info \
-H "Content-Type: application/json" \
-d '{
"platform": "baijiahao",
"cookie": "你的cookie字符串"
}'
curl -X POST http://localhost:5001/works \
-H "Content-Type: application/json" \
-d '{
"platform": "baijiahao",
"cookie": "你的cookie字符串",
"page": 0,
"page_size": 20
}'
curl -X POST http://localhost:5001/check_login \
-H "Content-Type: application/json" \
-d '{
"platform": "baijiahao",
"cookie": "你的cookie字符串"
}'
查看终端日志,应该看到:
[refreshAccount] Platform: baijiahao, shouldUseAI: false
[checkCookieValid] Checking cookie for baijiahao
[baijiahao] 检查登录状态 (使用 API)
[baijiahao] 调用 appinfo API 检查登录状态...
[baijiahao] ✓ 登录状态有效: 账号名称
[fetchAccountInfo] Using direct API for baijiahao
[Baijiahao API] Fetching account info via direct API...
[Baijiahao API] [1/3] 调用 appinfo API...
[Baijiahao API] [2/3] 调用 growth/get_info API 获取粉丝数...
[Baijiahao API] [3/3] 调用 article/lists API 获取作品数...
[Baijiahao API] ✓ 获取成功: 账号名称 (粉丝: X, 作品: Y)
| 特性 | 浏览器方式 | API 方式 |
|---|---|---|
| 速度 | 10-30 秒 | 1-3 秒 |
| 内存占用 | 高(浏览器) | 低(HTTP 请求) |
| 可靠性 | 依赖页面结构 | 稳定的 API |
| 错误处理 | 复杂(截图分析) | 简单(errno 判断) |
| 维护成本 | 高(页面变化需更新) | 低(API 稳定) |
server/python/platforms/baijiahao.py - Python 百家号实现server/src/services/HeadlessBrowserService.ts - Node.js 百家号 API 实现server/src/services/AccountService.ts - 账号刷新服务docs/baijiahao-refresh-api.md - Node.js API 实现文档docs/baijiahao-cookie-validation.md - Cookie 验证文档