Files
pansou/plugin/weibo/README.md
www.xueximeng.com 2bbc277383 更新文档
2025-11-19 17:49:47 +08:00

13 KiB
Raw Blame History

微博搜索插件 (Weibo)

📖 简介

Weibo是PanSou的微博搜索插件支持多用户登录微博并配置要搜索的微博用户在搜索时自动聚合所有配置的微博用户发布的资源链接从微博正文和评论中提取

核心特性

  • 多账户支持 - 每个微博账户独立配置,互不干扰
  • 扫码登录 - 手机微博扫码自动获取Cookie
  • 多微博用户 - 每个账户可配置多个要搜索的微博用户
  • 评论提取 - 自动提取微博正文和评论中的网盘链接
  • 智能去重 - 多账户配置相同微博用户时自动去重
  • 负载均衡 - 任务均匀分配,避免单账户限流
  • 内存缓存 - 用户数据缓存到内存,搜索性能极高
  • 持久化存储 - Cookie和配置自动保存重启不丢失
  • Web管理界面 - 一站式配置,简单易用
  • RESTful API - 支持程序化调用

🚀 快速开始

步骤1: 启动服务

cd /path/to/pansou
ENABLED_PLUGINS=weibo go run main.go

# 或者编译后运行
go build -o pansou main.go
ENABLED_PLUGINS=weibo ./pansou

步骤2: 访问管理页面

浏览器打开:

http://localhost:8888/weibo/你的微博用户名

示例

http://localhost:8888/weibo/pansou123

系统会自动:

  1. 根据用户名生成专属64位hash不可逆
  2. 重定向到专属管理页面:http://localhost:8888/weibo/{hash}
  3. 显示二维码供扫码登录

📌 提示请收藏hash后的URL包含你的专属hash方便下次访问。

步骤3: 扫码登录

  1. 页面会自动显示微博登录二维码
  2. 使用手机微博APP扫描二维码
  3. 扫码后系统会自动检测登录状态每2秒检查一次
  4. 登录成功后自动显示用户信息

步骤4: 配置微博用户

在"微博用户管理"区域输入要搜索的微博用户ID每行一个

1234567890
2345678901
3456789012

支持格式

  • 纯用户ID1234567890
  • 完整URLhttps://weibo.com/u/1234567890

点击"保存配置"按钮。

📌 如何获取微博用户ID

  1. 访问目标微博用户主页
  2. 查看URLhttps://weibo.com/u/1234567890
  3. 其中 1234567890 就是用户ID

步骤5: 开始搜索

在PanSou主页搜索框输入关键词系统会自动搜索所有配置的微博用户的微博内容!

# 通过API搜索
curl "http://localhost:8888/api/search?kw=唐朝诡事录"

# 只搜索插件包括weibo
curl "http://localhost:8888/api/search?kw=唐朝诡事录&src=plugin"

📡 API文档

统一接口

所有操作通过统一的POST接口

POST /weibo/{hash}
Content-Type: application/json

{
  "action": "操作类型",
  ...其他参数
}

API列表

Action 说明 需要登录 前端调用时机
get_status 获取状态 每3秒自动调用
refresh_qrcode 刷新二维码 用户点击刷新按钮
check_login 检查登录状态 未登录时每2秒调用
logout 退出登录 用户点击退出按钮
set_users 设置微博用户列表 用户点击保存按钮
test_search 测试搜索 用户点击搜索按钮

1 get_status - 获取账户状态

作用:获取当前账户的登录状态、配置的微博用户等信息

请求

curl -X POST "http://localhost:8888/weibo/{hash}" \
  -H "Content-Type: application/json" \
  -d '{"action": "get_status"}'

成功响应(已登录)

{
  "success": true,
  "message": "获取成功",
  "data": {
    "hash": "abc123...",
    "logged_in": true,
    "status": "active",
    "username_masked": "pa****ou",
    "login_time": "2025-10-28 12:00:00",
    "expire_time": "2026-10-28 12:00:00",
    "expires_in_days": 365,
    "weibo_users": ["1234567890", "2345678901"],
    "user_count": 2,
    "qrcode_base64": ""
  }
}

成功响应(未登录)

{
  "success": true,
  "message": "获取成功",
  "data": {
    "hash": "abc123...",
    "logged_in": false,
    "status": "pending",
    "username_masked": "",
    "weibo_users": [],
    "user_count": 0,
    "qrcode_base64": "data:image/png;base64,iVBORw0KGgo..."
  }
}

2 refresh_qrcode - 刷新二维码

作用:强制生成新的二维码(当二维码过期时)

请求

curl -X POST "http://localhost:8888/weibo/{hash}" \
  -H "Content-Type: application/json" \
  -d '{"action": "refresh_qrcode"}'

成功响应

{
  "success": true,
  "message": "二维码已刷新",
  "data": {
    "qrcode_base64": "data:image/png;base64,iVBORw0KGgo..."
  }
}

说明

  • 二维码有效期约2-3分钟
  • 过期后需要点击刷新

3 check_login - 检查登录状态

作用:检查二维码是否被扫描,登录是否成功(扫码后轮询调用)

请求

curl -X POST "http://localhost:8888/weibo/{hash}" \
  -H "Content-Type: application/json" \
  -d '{"action": "check_login"}'

响应(等待扫码)

{
  "success": true,
  "message": "等待扫码",
  "data": {
    "login_status": "waiting"
  }
}

响应(登录成功)

{
  "success": true,
  "message": "登录成功",
  "data": {
    "login_status": "success",
    "username_masked": "pa****ou"
  }
}

响应(二维码过期)

{
  "success": false,
  "message": "二维码已失效,请刷新"
}

说明

  • 前端未登录时每2秒自动调用
  • 登录成功后前端会停止轮询
  • 后端会自动获取完整Cookie并保存

4 logout - 退出登录

作用清除Cookie退出登录状态

请求

curl -X POST "http://localhost:8888/weibo/{hash}" \
  -H "Content-Type: application/json" \
  -d '{"action": "logout"}'

成功响应

{
  "success": true,
  "message": "已退出登录",
  "data": {
    "status": "pending"
  }
}

5 set_users - 设置微博用户列表

作用:配置或更新要搜索的微博用户列表(覆盖式更新)

请求

curl -X POST "http://localhost:8888/weibo/{hash}" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "set_users",
    "users": ["1234567890", "2345678901", "https://weibo.com/u/3456789012"]
  }'

成功响应

{
  "success": true,
  "message": "微博用户列表已更新",
  "data": {
    "weibo_users": ["1234567890", "2345678901", "3456789012"],
    "user_count": 3,
    "invalid_users": []
  }
}

说明

  • 自动提取用户ID支持URL格式
  • 自动去重
  • 只保存数字格式的用户ID

6 test_search - 测试搜索

作用:在管理页面测试搜索功能

请求

curl -X POST "http://localhost:8888/weibo/{hash}" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "test_search",
    "keyword": "唐朝诡事录"
  }'

参数

  • keyword(必需):搜索关键词

成功响应

{
  "success": true,
  "message": "找到 3 条结果",
  "data": {
    "keyword": "唐朝诡事录",
    "total_results": 3,
    "users_searched": ["1234567890", "2345678901"],
    "results": [
      {
        "unique_id": "weibo-1234567890-M_Pqs5eOb",
        "title": "唐朝诡事录 全集",
        "content": "唐朝诡事录更新至40集...",
        "links": [
          {
            "type": "quark",
            "url": "https://pan.quark.cn/s/xxxxx",
            "password": ""
          }
        ]
      }
    ]
  }
}

🔧 配置说明

环境变量(可选)

# Hash Salt推荐自定义增强安全性
export WEIBO_HASH_SALT="your-custom-salt-here"

# Cookie加密密钥32字节推荐自定义
export WEIBO_ENCRYPTION_KEY="your-32-byte-key-here!!!!!!!!!!"

代码内配置

weibo.go 第28-33行修改

const (
    MaxConcurrentUsers = 10  // 最多同时搜索多少个微博账户
    MaxConcurrentWeibo = 30  // 最多同时处理多少条微博(获取评论)
    MaxComments        = 1   // 每条微博最多获取多少条评论
    DebugLog           = false
)

参数说明

参数 默认值 说明 建议
MaxConcurrentUsers 10 单次搜索最多使用的微博账户数 5-10足够
MaxConcurrentWeibo 30 最大并发处理微博数(获取评论) 20-50
MaxComments 1 每条微博最多获取多少条评论 1-3条
DebugLog false 是否开启调试日志 生产环境false

📂 数据存储

存储位置

cache/weibo_users/{hash}.json

数据结构

{
  "hash": "abc123...",
  "username_masked": "pa****ou",
  "cookie": "SUB=xxx; SUBP=xxx; ...",
  "status": "active",
  "weibo_users": ["1234567890", "2345678901", "3456789012"],
  "created_at": "2025-11-19T12:00:00+08:00",
  "login_at": "2025-11-19T12:00:00+08:00",
  "expire_at": "2026-11-19T12:00:00+08:00",
  "last_access_at": "2025-11-19T13:00:00+08:00"
}

字段说明

  • hash: 账户唯一标识SHA256不可逆
  • username_masked: 脱敏用户名(如pa****ou
  • cookie: 微博登录Cookie明文存储建议配置加密
  • status: 账户状态(pending/active/expired
  • weibo_users: 要搜索的微博用户ID列表
  • expire_at: Cookie过期时间

🔒 安全特性

1. 用户名隐私保护

  • 不存储明文用户名只存储SHA256 hash64位十六进制
  • 不可逆无法从hash反推用户名
  • 加盐hash支持自定义salt进一步增强安全性

2. Cookie安全

  • ⚠️ 当前明文存储到JSON方便调试
  • 可选:通过环境变量配置加密密钥
  • 建议:生产环境配置WEIBO_ENCRYPTION_KEY

3. 自动清理

定期清理任务每24小时

  • 删除:状态为expired且30天未访问的账户
  • 标记90天未访问的账户标记为expired

⚙️ 工作原理

搜索流程

用户搜索关键词 "唐朝诡事录"
  ↓
加载所有active状态的微博账户
  ↓
取最近访问的前10个账户负载均衡
  ↓
为每个账户分配要搜索的微博用户
  ↓
并发执行:
  账户A → 搜索微博用户 1234567890
  账户B → 搜索微博用户 2345678901
  账户C → 搜索微博用户 3456789012
  ↓
  对每个微博用户:
    1. 获取前3页微博列表
    2. 过滤包含关键词的微博
    3. 提取微博正文中的网盘链接
    4. 获取第1条评论可配置
    5. 提取评论中的网盘链接
  ↓
合并所有账户的搜索结果
  ↓
去重基于微博ID
  ↓
返回最终结果

链接提取

支持的网盘类型

  • 夸克网盘:https://pan.quark.cn/s/xxxxx
  • 阿里云盘:https://www.alipan.com/s/xxxxx
  • 百度网盘:https://pan.baidu.com/s/xxxxx
  • 其他常见网盘

提取位置

  1. 微博正文
  2. 微博评论默认取第1条

负载均衡

账户A配置: [用户1, 用户2, 用户3, 用户4]
账户B配置: [用户2, 用户3, 用户5, 用户6]
账户C配置: [用户1, 用户5, 用户7]

去重后要搜索的微博用户:
  [用户1, 用户2, 用户3, 用户4, 用户5, 用户6, 用户7]

任务分配(轮询):
  用户1 → 账户A
  用户2 → 账户B
  用户3 → 账户C
  用户4 → 账户A
  用户5 → 账户B
  用户6 → 账户C
  用户7 → 账户A

🎯 使用场景

场景1: 追剧更新

配置几个经常分享资源的微博用户,自动获取最新更新的剧集链接。

场景2: 资源聚合

配置多个不同领域的资源分享博主,一次搜索聚合所有相关资源。

场景3: 团队协作

团队成员各自配置自己的微博账户和关注的资源博主,共享搜索结果。

📝 注意事项

  1. Cookie有效期微博Cookie约1年有效过期需要重新登录
  2. 请求限制:单个账户请求过快可能被限流,建议配置多个账户
  3. 评论获取默认只获取每条微博的第1条评论可通过MaxComments调整
  4. 用户ID格式:必须是纯数字格式(如1234567890),不支持个性化域名

🔍 故障排查

问题1: 搜索无结果

可能原因

  • 配置的微博用户没有发布包含关键词的内容
  • Cookie已过期需要重新登录
  • 微博用户ID配置错误

解决方法

  1. 检查管理页面的登录状态
  2. 使用"测试搜索"功能验证
  3. 确认微博用户ID格式正确

问题2: 登录失败

可能原因

  • 二维码已过期
  • 网络问题
  • 微博安全策略限制

解决方法

  1. 点击"刷新二维码"重试
  2. 检查网络连接
  3. 尝试更换网络环境

问题3: Cookie频繁失效

可能原因

  • 账户在其他设备登录
  • 账户安全策略
  • 请求频率过高

解决方法

  1. 减少请求频率
  2. 配置多个账户分散请求
  3. 检查账户安全设置

📚 更多信息