Files
pansou/plugin/weibo/README.md

566 lines
13 KiB
Markdown
Raw Normal View History

2025-11-19 17:49:47 +08:00
# 微博搜索插件 (Weibo)
## 📖 简介
Weibo是PanSou的微博搜索插件支持多用户登录微博并配置要搜索的微博用户在搜索时自动聚合所有配置的微博用户发布的资源链接从微博正文和评论中提取
## ✨ 核心特性
-**多账户支持** - 每个微博账户独立配置,互不干扰
-**扫码登录** - 手机微博扫码自动获取Cookie
-**多微博用户** - 每个账户可配置多个要搜索的微博用户
-**评论提取** - 自动提取微博正文和评论中的网盘链接
-**智能去重** - 多账户配置相同微博用户时自动去重
-**负载均衡** - 任务均匀分配,避免单账户限流
-**内存缓存** - 用户数据缓存到内存,搜索性能极高
-**持久化存储** - Cookie和配置自动保存重启不丢失
-**Web管理界面** - 一站式配置,简单易用
-**RESTful API** - 支持程序化调用
## 🚀 快速开始
### 步骤1: 启动服务
```bash
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
```
**支持格式**
- ✅ 纯用户ID`1234567890`
- ✅ 完整URL`https://weibo.com/u/1234567890`
点击"**保存配置**"按钮。
**📌 如何获取微博用户ID**
1. 访问目标微博用户主页
2. 查看URL`https://weibo.com/u/1234567890`
3. 其中 `1234567890` 就是用户ID
### 步骤5: 开始搜索
在PanSou主页搜索框输入关键词系统会**自动搜索所有配置的微博用户**的微博内容!
```bash
# 通过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 - 获取账户状态
**作用**:获取当前账户的登录状态、配置的微博用户等信息
**请求**
```bash
curl -X POST "http://localhost:8888/weibo/{hash}" \
-H "Content-Type: application/json" \
-d '{"action": "get_status"}'
```
**成功响应(已登录)**
```json
{
"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": ""
}
}
```
**成功响应(未登录)**
```json
{
"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 - 刷新二维码
**作用**:强制生成新的二维码(当二维码过期时)
**请求**
```bash
curl -X POST "http://localhost:8888/weibo/{hash}" \
-H "Content-Type: application/json" \
-d '{"action": "refresh_qrcode"}'
```
**成功响应**
```json
{
"success": true,
"message": "二维码已刷新",
"data": {
"qrcode_base64": "data:image/png;base64,iVBORw0KGgo..."
}
}
```
**说明**
- 二维码有效期约2-3分钟
- 过期后需要点击刷新
---
### 3⃣ check_login - 检查登录状态
**作用**:检查二维码是否被扫描,登录是否成功(扫码后轮询调用)
**请求**
```bash
curl -X POST "http://localhost:8888/weibo/{hash}" \
-H "Content-Type: application/json" \
-d '{"action": "check_login"}'
```
**响应(等待扫码)**
```json
{
"success": true,
"message": "等待扫码",
"data": {
"login_status": "waiting"
}
}
```
**响应(登录成功)**
```json
{
"success": true,
"message": "登录成功",
"data": {
"login_status": "success",
"username_masked": "pa****ou"
}
}
```
**响应(二维码过期)**
```json
{
"success": false,
"message": "二维码已失效,请刷新"
}
```
**说明**
- 前端未登录时每2秒自动调用
- 登录成功后前端会停止轮询
- 后端会自动获取完整Cookie并保存
---
### 4⃣ logout - 退出登录
**作用**清除Cookie退出登录状态
**请求**
```bash
curl -X POST "http://localhost:8888/weibo/{hash}" \
-H "Content-Type: application/json" \
-d '{"action": "logout"}'
```
**成功响应**
```json
{
"success": true,
"message": "已退出登录",
"data": {
"status": "pending"
}
}
```
---
### 5⃣ set_users - 设置微博用户列表
**作用**:配置或更新要搜索的微博用户列表(覆盖式更新)
**请求**
```bash
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"]
}'
```
**成功响应**
```json
{
"success": true,
"message": "微博用户列表已更新",
"data": {
"weibo_users": ["1234567890", "2345678901", "3456789012"],
"user_count": 3,
"invalid_users": []
}
}
```
**说明**
- 自动提取用户ID支持URL格式
- 自动去重
- 只保存数字格式的用户ID
---
### 6⃣ test_search - 测试搜索
**作用**:在管理页面测试搜索功能
**请求**
```bash
curl -X POST "http://localhost:8888/weibo/{hash}" \
-H "Content-Type: application/json" \
-d '{
"action": "test_search",
"keyword": "唐朝诡事录"
}'
```
**参数**
- `keyword`(必需):搜索关键词
**成功响应**
```json
{
"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": ""
}
]
}
]
}
}
```
---
## 🔧 配置说明
### 环境变量(可选)
```bash
# 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行修改
```go
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
```
### 数据结构
```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. 检查账户安全设置
## 📚 更多信息
- [PanSou 项目主页](https://github.com/fish2018/pansou)
- [插件开发指南](../../docs/插件开发指南.md)
- [常见问题](https://github.com/fish2018/pansou/issues)