4.4 KiB
直接传 UID 关注:调研、实现及实测
结论与变更
src/follow_user.py 改为只接收目标数字 UID,不再要求或解析用户主页链接。无需打开目标主页,仍通过已有抖音标签页的登录态与运行环境调用接口,不是脱离浏览器的 HTTP 客户端。
旧文档 2026-09-06-00-13-follow-user.md 中传主页链接的命令属于历史版本,现以本文命令为准。依赖与安装方式不变。
调研日志
- 检查调用关系:生产代码中只有脚本 main 调用 follow_user;同步更新离线测试。
- 使用既有
get_user_from_browser()确认登录有效,不执行任何登录操作。 - 只发送资料 GET,验证
/aweme/v1/web/user/profile/other/除了sec_user_id,也支持查询参数user_id=4432868004606158。返回 UID 完全一致,昵称tico168888,关注状态0。没有打开或导航到此用户主页。 - 将资料查询参数改为
user_id,返回 UID 必须与输入字符串完全一致;不依赖返回 sec_uid 来发起关注。 - 保留关注前状态检查、禁止关注自己、已关注跳过、关注后回查和异常不重试。输入校验发生在连接浏览器之前;只接受不带前导零的正整数 ASCII 数字字符串,拒绝主页链接、空串、零、负号、小数及全角数字。
- 离线 4 项测试通过后,运行 CLI 的
--check确认目标未关注,再执行一次真实关注。 - 关注成功并回查确认
follow_status=1;重复运行返回already_following,不再次提交关注。
请求参数与完整流程
公共查询参数:device_platform=webapp&aid=6383&channel=channel_pc_web。
- 当前登录态检查:沿用
/aweme/v1/web/user/profile/self/?device_platform=webapp&aid=6383。 - 目标状态:
GET /aweme/v1/web/user/profile/other/,公共参数加user_id=<uid>。 - 仅未关注时:
POST /aweme/v1/web/commit/follow/user/,公共查询参数;表单正文user_id=<uid>&type=1,Content-Type 为application/x-www-form-urlencoded; charset=UTF-8。 - 关注成功后:重复步骤 2,只读确认同一个 UID 已关注。
返回 JSON 为 action、uid、sec_uid(资料附带)、nickname、follow_status;输入不需要 sec_uid。脚本没有取消关注分支,不自动重试写请求。HTTP 200 和 status_code=0 之外,必须同时检查关注响应与回查状态为 1 或 2。私密账号审批等其他状态仍停止,不推测成功。
这些是脚本明确传入的参数;Cookie 由浏览器携带,页面 SDK 可能附加安全字段,未逐项抓取最终网络层字段。
命令与实测输出
python3 src/follow_user.py 4432868004606158 --check
python3 src/follow_user.py 4432868004606158
实际新增关注输出摘要:
{
"action": "followed",
"uid": "4432868004606158",
"nickname": "tico168888",
"follow_status": 1
}
再次执行相同关注命令:action=already_following, follow_status=1。未取消或修改此前测试对象的关注关系。
python3 -m unittest discover -s src -p 'test_follow_user.py'
4 项离线测试通过:UID 边界、首次关注及状态回查、只查/已关注/相互关注跳过、身份不匹配/失效登录/自己/未知状态停止、写入不确定时不自动重试。测试使用标准库 unittest/mock,不访问浏览器。
空白环境安装与复用
项目 Python 3.10+,保留同目录 src/get_current_user.py;无需新 Python 依赖。另需 Chrome/Chromium 和 browser-harness:
# uv 尚未安装时,可通过系统包管理器或用户级 pip 安装
python3 -m pip install --user uv
export PATH="$HOME/.local/bin:$PATH"
uv tool install --python 3.12 --upgrade --force browser-harness
uv tool update-shell
export BU_CDP_URL=http://localhost:9222
browser-harness --doctor
已有 CDP 浏览器直接复用;空白环境须自行开启 Chrome 远程调试、打开抖音并手动登录,详细步骤见前一篇文档安装章节。端点可通过环境变量指定,不固化账号、目标 UID 或标签 ID。遇到登录失效停止,不尝试自动登录。只串行使用,不并发切换账号或标签。
若从通知文件取目标,使用 notifications[].users[].uid;原始通知的顶层 user_id 是通知接收账号,不是互动用户。UID 在调用和 JSON 中保持字符串,避免大整数精度损失。