LOCATION_MATCHING.md 3.9 KB

位置自动匹配功能说明

功能概述

当启用代理发布时,系统会自动使用代理所在地区作为发布位置,避免账号地区与发布位置不一致触发风控。

实现方式

1. 自动提取代理地区

# 在 app.py 中
if proxy_payload.get('enabled'):
    proxy_city = proxy_payload.get('city', '').strip()
    if proxy_city:
        location = proxy_city  # 自动设置为代理地区

2. 传递给发布器

params = PublishParams(
    title=title,
    video_path=video_path,
    location=location  # 使用代理地区
)

3. 设置位置(微信视频号)

# 在 weixin.py 的 add_title_tags 方法中
if params.location:
    await self.set_location(params.location)

使用方法

方式 1: 自动从代理配置提取(推荐)

POST /publish/ai-assisted
{
  "platform": "weixin",
  "proxy": {
    "enabled": true,
    "provider": "shenlong",
    "productKey": "xxx",
    "signature": "xxx",
    "regionCode": "310000",
    "city": "上海"  // ← 自动使用这个
  }
}

系统会自动:

  1. 提取 city 字段
  2. 设置为发布位置
  3. 避免地区不一致

方式 2: 手动指定位置

{
  "platform": "weixin",
  "location": "北京",  // ← 手动指定
  "proxy": {
    "enabled": true,
    ...
  }
}

优先级

  1. 手动指定的 location > 代理配置的 city > 默认值(重庆市)

注意事项

微信视频号位置设置

微信视频号发布页面的位置选择 UI 可能因版本/账号而异。当前实现了以下查找策略:

  1. 查找位置输入框:

    • input[placeholder*="位置"]
    • input[placeholder*="所在"]
    • input[placeholder*="地点"]
  2. 查找位置按钮:

    • div:has-text("所在位置")
    • div:has-text("添加位置")
  3. 输入并选择:

    • 填充位置名称
    • 等待建议出现
    • 选择匹配项

如果位置未生效

  1. 检查代理配置

    {
     "proxy": {
       "city": "上海"  // 确保这个字段存在
     }
    }
    
    1. 查看日志: ```

[weixin] 准备设置位置: 上海 [weixin] 正在设置位置: 上海 [weixin] 找到位置元素: xxx [weixin] ✓ 位置设置成功: 上海


3. **手动指定位置**:
   ```json
   {
     "location": "上海"  // 手动指定
   }

调试建议

查看完整日志

# 启动服务时禁用缓冲
PYTHONUNBUFFERED=1 python app.py --headless false

检查截图

发布完成后的截图会显示最终的位置设置状态。

有头模式观察

{
  "headless": false  // 显示浏览器窗口
}

在浏览器窗口中观察位置设置过程。

已知问题

1. 微信视频号位置UI变化

如果微信更新了发布页面UI,位置选择器可能失效。

解决方法:更新 weixin.py 中的 set_location 方法的选择器列表。

2. 位置建议不匹配

如果输入的位置没有精确匹配的建议项,系统会尝试选择第一个建议。

解决方法:使用标准城市名称(如"上海"而非"上海市")。

测试验证

测试脚本

const response = await fetch('http://localhost:5005/publish/ai-assisted', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    platform: 'weixin',
    proxy: {
      enabled: true,
      city: '上海'  // 测试自动匹配
    }
  })
});

预期结果

✅ 使用代理地区作为发布位置: 上海
✅ 准备设置位置: 上海
✅ 正在设置位置: 上海
✅ 找到位置元素
✅ 位置设置成功: 上海

其他平台

不同平台的位置设置方式不同:

  • 抖音: 需要单独实现
  • 小红书: 需要单独实现
  • 快手: 需要单独实现

如需支持其他平台,请在对应的 platforms/xxx.py 中实现 set_location 方法。