plugin/weibo/README.md
Weibo是PanSou的微博搜索插件,支持多用户登录微博并配置要搜索的微博用户,在搜索时自动聚合所有配置的微博用户发布的资源链接(从微博正文和评论中提取)。
cd /path/to/pansou
ENABLED_PLUGINS=weibo go run main.go
# 或者编译后运行
go build -o pansou main.go
ENABLED_PLUGINS=weibo ./pansou
浏览器打开:
http://localhost:8888/weibo/你的微博用户名
示例:
http://localhost:8888/weibo/pansou123
系统会自动:
http://localhost:8888/weibo/{hash}📌 提示:请收藏hash后的URL(包含你的专属hash),方便下次访问。
在"微博用户管理"区域输入要搜索的微博用户ID,每行一个:
1234567890
2345678901
3456789012
支持格式:
1234567890https://weibo.com/u/1234567890点击"保存配置"按钮。
📌 如何获取微博用户ID?
https://weibo.com/u/12345678901234567890 就是用户ID在PanSou主页搜索框输入关键词,系统会自动搜索所有配置的微博用户的微博内容!
# 通过API搜索
curl "http://localhost:8888/api/search?kw=唐朝诡事录"
# 只搜索插件(包括weibo)
curl "http://localhost:8888/api/search?kw=唐朝诡事录&src=plugin"
所有操作通过统一的POST接口:
POST /weibo/{hash}
Content-Type: application/json
{
"action": "操作类型",
...其他参数
}
| Action | 说明 | 需要登录 | 前端调用时机 |
|---|---|---|---|
get_status | 获取状态 | ❌ | 每3秒自动调用 |
refresh_qrcode | 刷新二维码 | ❌ | 用户点击刷新按钮 |
check_login | 检查登录状态 | ❌ | 未登录时每2秒调用 |
logout | 退出登录 | ✅ | 用户点击退出按钮 |
set_users | 设置微博用户列表 | ✅ | 用户点击保存按钮 |
test_search | 测试搜索 | ✅ | 用户点击搜索按钮 |
作用:获取当前账户的登录状态、配置的微博用户等信息
请求:
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..."
}
}
作用:强制生成新的二维码(当二维码过期时)
请求:
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..."
}
}
说明:
作用:检查二维码是否被扫描,登录是否成功(扫码后轮询调用)
请求:
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": "二维码已失效,请刷新"
}
说明:
作用:清除Cookie,退出登录状态
请求:
curl -X POST "http://localhost:8888/weibo/{hash}" \
-H "Content-Type: application/json" \
-d '{"action": "logout"}'
成功响应:
{
"success": true,
"message": "已退出登录",
"data": {
"status": "pending"
}
}
作用:配置或更新要搜索的微博用户列表(覆盖式更新)
请求:
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": []
}
}
说明:
作用:在管理页面测试搜索功能
请求:
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过期时间WEIBO_ENCRYPTION_KEY定期清理任务(每24小时):
expired且30天未访问的账户expired用户搜索关键词 "唐朝诡事录"
↓
加载所有active状态的微博账户
↓
取最近访问的前10个账户(负载均衡)
↓
为每个账户分配要搜索的微博用户
↓
并发执行:
账户A → 搜索微博用户 1234567890
账户B → 搜索微博用户 2345678901
账户C → 搜索微博用户 3456789012
↓
对每个微博用户:
1. 获取前3页微博列表
2. 过滤包含关键词的微博
3. 提取微博正文中的网盘链接
4. 获取第1条评论(可配置)
5. 提取评论中的网盘链接
↓
合并所有账户的搜索结果
↓
去重(基于微博ID)
↓
返回最终结果
支持的网盘类型:
https://pan.quark.cn/s/xxxxxhttps://www.alipan.com/s/xxxxxhttps://pan.baidu.com/s/xxxxx提取位置:
账户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
配置几个经常分享资源的微博用户,自动获取最新更新的剧集链接。
配置多个不同领域的资源分享博主,一次搜索聚合所有相关资源。
团队成员各自配置自己的微博账户和关注的资源博主,共享搜索结果。
MaxComments调整1234567890),不支持个性化域名可能原因:
解决方法:
可能原因:
解决方法:
可能原因:
解决方法: