@wecode-ai/weibo-openclaw-plugin 2.2.10 → 2.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/tar/dist/commonjs/header.d.ts.map +1 -1
- package/node_modules/tar/dist/commonjs/header.js +51 -16
- package/node_modules/tar/dist/commonjs/header.js.map +1 -1
- package/node_modules/tar/dist/commonjs/index.min.js +3 -3
- package/node_modules/tar/dist/commonjs/index.min.js.map +3 -3
- package/node_modules/tar/dist/commonjs/pack.d.ts +1 -1
- package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -1
- package/node_modules/tar/dist/commonjs/pack.js +4 -5
- package/node_modules/tar/dist/commonjs/pack.js.map +1 -1
- package/node_modules/tar/dist/commonjs/types.d.ts +9 -0
- package/node_modules/tar/dist/commonjs/types.d.ts.map +1 -1
- package/node_modules/tar/dist/commonjs/types.js +21 -1
- package/node_modules/tar/dist/commonjs/types.js.map +1 -1
- package/node_modules/tar/dist/esm/header.d.ts.map +1 -1
- package/node_modules/tar/dist/esm/header.js +51 -16
- package/node_modules/tar/dist/esm/header.js.map +1 -1
- package/node_modules/tar/dist/esm/index.min.js +3 -3
- package/node_modules/tar/dist/esm/index.min.js.map +3 -3
- package/node_modules/tar/dist/esm/pack.d.ts +1 -1
- package/node_modules/tar/dist/esm/pack.d.ts.map +1 -1
- package/node_modules/tar/dist/esm/pack.js +4 -5
- package/node_modules/tar/dist/esm/pack.js.map +1 -1
- package/node_modules/tar/dist/esm/types.d.ts +9 -0
- package/node_modules/tar/dist/esm/types.d.ts.map +1 -1
- package/node_modules/tar/dist/esm/types.js +20 -0
- package/node_modules/tar/dist/esm/types.js.map +1 -1
- package/node_modules/tar/package.json +11 -10
- package/node_modules/ws/lib/receiver.js +54 -0
- package/node_modules/ws/lib/websocket-server.js +8 -0
- package/node_modules/ws/lib/websocket.js +14 -0
- package/node_modules/ws/package.json +1 -1
- package/package.json +1 -1
- package/skills/manifest.json +2 -1
- package/skills/weibo-adincentive/SKILL.md +511 -0
- package/skills/weibo-adincentive/scripts/weibo-adincentive.js +217 -0
- package/skills/weibo-creator/SKILL.md +21 -3
- package/skills/weibo-creator/scripts/weibo-creator.js +2 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 微博激励计划数据摘要脚本
|
|
5
|
+
*
|
|
6
|
+
* 使用方法:
|
|
7
|
+
* node weibo-adincentive.js summary --token=<token>
|
|
8
|
+
*
|
|
9
|
+
* 命令:
|
|
10
|
+
* summary 获取激励计划数据摘要(在线计划列表、计划高收益博文示例、博主优质博文)
|
|
11
|
+
* help 显示帮助信息
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import https from 'https';
|
|
15
|
+
import http from 'http';
|
|
16
|
+
import { URL } from 'url';
|
|
17
|
+
|
|
18
|
+
const BASE_URL = 'https://open-im.api.weibo.com';
|
|
19
|
+
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// HTTP 请求
|
|
22
|
+
// ============================================================================
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 发送 HTTP 请求
|
|
26
|
+
* @param {string} method - HTTP 方法
|
|
27
|
+
* @param {string} url - 请求 URL
|
|
28
|
+
* @param {object|null} data - 请求数据(POST 时使用)
|
|
29
|
+
* @returns {Promise<object>} 响应数据
|
|
30
|
+
*/
|
|
31
|
+
function request(method, url, data = null) {
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
const urlObj = new URL(url);
|
|
34
|
+
const isHttps = urlObj.protocol === 'https:';
|
|
35
|
+
const httpModule = isHttps ? https : http;
|
|
36
|
+
|
|
37
|
+
const options = {
|
|
38
|
+
hostname: urlObj.hostname,
|
|
39
|
+
port: urlObj.port || (isHttps ? 443 : 80),
|
|
40
|
+
path: urlObj.pathname + urlObj.search,
|
|
41
|
+
method: method,
|
|
42
|
+
headers: {
|
|
43
|
+
'Content-Type': 'application/json',
|
|
44
|
+
'Accept': 'application/json',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const req = httpModule.request(options, (res) => {
|
|
49
|
+
let body = '';
|
|
50
|
+
res.on('data', (chunk) => { body += chunk; });
|
|
51
|
+
res.on('end', () => {
|
|
52
|
+
try { resolve(JSON.parse(body)); }
|
|
53
|
+
catch (e) { reject(new Error(`解析响应失败: ${body}`)); }
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
req.on('error', (e) => { reject(e); });
|
|
58
|
+
if (data) req.write(JSON.stringify(data));
|
|
59
|
+
req.end();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// API 函数
|
|
65
|
+
// ============================================================================
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 获取激励计划数据摘要
|
|
69
|
+
*
|
|
70
|
+
* 返回结构(AdIncentiveSummary)包含:
|
|
71
|
+
* - uid: 用户 uid
|
|
72
|
+
* - userLevel: 用户认证等级(如"金V"、"蓝V"、"普通用户"等)
|
|
73
|
+
* - plans: 在线激励计划列表(IncentivePlan[])
|
|
74
|
+
* - totalPlans: 在线激励计划总数
|
|
75
|
+
* - planRanks: 计划高收益博文示例(Map<key, PlanRank>,通过planName与plans关联)
|
|
76
|
+
* - myBlogs: 博主近7日高收益博文列表(MyBlog[])
|
|
77
|
+
*
|
|
78
|
+
* @param {string} token - 认证令牌
|
|
79
|
+
* @returns {Promise<object>} 激励计划数据摘要
|
|
80
|
+
*/
|
|
81
|
+
async function getAdIncentiveSummary(token) {
|
|
82
|
+
const params = new URLSearchParams({ token });
|
|
83
|
+
const url = `${BASE_URL}/open/adincentive/summary?${params.toString()}`;
|
|
84
|
+
return request('GET', url);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ============================================================================
|
|
88
|
+
// 命令行参数解析
|
|
89
|
+
// ============================================================================
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* 解析命令行参数
|
|
93
|
+
* @param {string[]} args - 命令行参数
|
|
94
|
+
* @returns {object} 解析后的参数对象
|
|
95
|
+
*/
|
|
96
|
+
function parseArgs(args) {
|
|
97
|
+
const result = {};
|
|
98
|
+
for (let i = 0; i < args.length; i++) {
|
|
99
|
+
const arg = args[i];
|
|
100
|
+
if (arg.startsWith('--')) {
|
|
101
|
+
const [key, ...valueParts] = arg.slice(2).split('=');
|
|
102
|
+
const value = valueParts.join('=') || args[++i] || true;
|
|
103
|
+
result[key] = value;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// ============================================================================
|
|
110
|
+
// 帮助信息
|
|
111
|
+
// ============================================================================
|
|
112
|
+
|
|
113
|
+
function printHelp() {
|
|
114
|
+
console.log(`
|
|
115
|
+
微博激励计划数据摘要脚本
|
|
116
|
+
|
|
117
|
+
使用方法:
|
|
118
|
+
node weibo-adincentive.js <command> [options]
|
|
119
|
+
|
|
120
|
+
命令:
|
|
121
|
+
summary 获取激励计划数据摘要
|
|
122
|
+
help 显示帮助信息
|
|
123
|
+
|
|
124
|
+
选项:
|
|
125
|
+
--token=<token> 微博 API 访问令牌(必填,通过 weibo_token 工具获取)
|
|
126
|
+
|
|
127
|
+
示例:
|
|
128
|
+
node weibo-adincentive.js summary --token=<your_token>
|
|
129
|
+
|
|
130
|
+
返回数据说明:
|
|
131
|
+
data.uid 用户 uid
|
|
132
|
+
data.userLevel 用户认证等级(如"金V"、"蓝V"、"普通用户"等)
|
|
133
|
+
data.plans 在线激励计划列表
|
|
134
|
+
.name 计划名称
|
|
135
|
+
.desc 计划描述/规则简介
|
|
136
|
+
.category 业务分类标识(hot/video/campus/cross/other)
|
|
137
|
+
.categoryName 业务分类中文名
|
|
138
|
+
.prUrl 计划PR博文链接
|
|
139
|
+
.hasRank 是否有高收益博文示例(周榜数据)
|
|
140
|
+
.tags[] 激励内容方向标签列表
|
|
141
|
+
.name 方向标签名称
|
|
142
|
+
data.totalPlans 在线激励计划总数
|
|
143
|
+
data.planRanks 计划高收益博文示例(Map结构,通过planName与plans关联)
|
|
144
|
+
.<key>.planName 计划名称
|
|
145
|
+
.<key>.rankRule 高收益博文示例规则说明
|
|
146
|
+
.<key>.prUrl 计划PR博文链接
|
|
147
|
+
.<key>.period 当前示例周期(最新一周)
|
|
148
|
+
.<key>.categories[] 分类tab列表
|
|
149
|
+
.cateId 分类ID
|
|
150
|
+
.name 分类名称
|
|
151
|
+
.<key>.blogs[] 高收益博文示例列表
|
|
152
|
+
.mid 博文mid
|
|
153
|
+
.text 博文正文内容
|
|
154
|
+
.topics[] 命中话题列表
|
|
155
|
+
.category 所属类别/tab名称
|
|
156
|
+
.hasVideo 是否含视频
|
|
157
|
+
.<key>.totalInPage 当前页博文数量
|
|
158
|
+
.<key>.hasMore 是否有更多数据
|
|
159
|
+
data.myBlogs 博主近7日高收益博文列表
|
|
160
|
+
.mid 博文mid
|
|
161
|
+
.text 博文正文内容
|
|
162
|
+
.createTime 发博日期(Y-m-d)
|
|
163
|
+
.topics[] 命中话题列表
|
|
164
|
+
.hasVideo 是否含视频
|
|
165
|
+
.matchedPlans[] 命中的激励计划列表
|
|
166
|
+
.name 计划名称
|
|
167
|
+
.prUrl 计划PR链接
|
|
168
|
+
`);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// 主函数
|
|
173
|
+
// ============================================================================
|
|
174
|
+
|
|
175
|
+
async function main() {
|
|
176
|
+
const args = process.argv.slice(2);
|
|
177
|
+
const command = args[0];
|
|
178
|
+
const options = parseArgs(args.slice(1));
|
|
179
|
+
|
|
180
|
+
if (!command || command === 'help') {
|
|
181
|
+
printHelp();
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
try {
|
|
186
|
+
let result;
|
|
187
|
+
|
|
188
|
+
switch (command) {
|
|
189
|
+
case 'summary': {
|
|
190
|
+
if (!options.token) {
|
|
191
|
+
console.error('需要指定 --token 参数,请先通过 weibo_token 工具获取');
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
result = await getAdIncentiveSummary(options.token);
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
default:
|
|
199
|
+
console.error(`未知命令: ${command}`);
|
|
200
|
+
console.log('使用 "node weibo-adincentive.js help" 查看帮助信息');
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
console.log(JSON.stringify(result, null, 2));
|
|
205
|
+
|
|
206
|
+
} catch (error) {
|
|
207
|
+
console.error(`请求失败: ${error.message}`);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// 导出函数供模块使用
|
|
213
|
+
export {
|
|
214
|
+
getAdIncentiveSummary,
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
main();
|
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
或当用户询问自己的 V榜排名、得分、与同领域博主对比、哪些方面需要提升时激活;
|
|
10
10
|
或当用户询问粉丝群运营情况、群活跃度、铁粉在群率、视频播放数据时激活。
|
|
11
11
|
metadata:
|
|
12
|
-
version: "1.0.
|
|
12
|
+
version: "1.0.5"
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# 微博创作者数据工具
|
|
@@ -36,6 +36,20 @@ node scripts/weibo-creator.js summary --token=<token>
|
|
|
36
36
|
|
|
37
37
|
返回的 `data` 字段为 `CreatorSummary` 对象,包含以下维度:
|
|
38
38
|
|
|
39
|
+
### 0. 用户基本信息
|
|
40
|
+
|
|
41
|
+
#### `data.uid` — 用户 uid
|
|
42
|
+
|
|
43
|
+
#### `data.userLevel` — 用户认证等级
|
|
44
|
+
|
|
45
|
+
| 字段 | 类型 | 说明 |
|
|
46
|
+
|------|------|------|
|
|
47
|
+
| `userLevel` | string | 用户认证等级(如 "金V"、"橙V"、"蓝V"、"黄V"、"普通用户" 等) |
|
|
48
|
+
|
|
49
|
+
> `userLevel` 反映博主当前的认证身份,在金橙V升级分析中可直接用于判断当前状态,无需从其他数据推断。
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
39
53
|
### 1. 近30天阅读数据
|
|
40
54
|
|
|
41
55
|
#### `data.readTrend30Days` — 每日阅读趋势(数组,T-1 至 T-30,共30条)
|
|
@@ -323,6 +337,7 @@ node scripts/weibo-creator.js help
|
|
|
323
337
|
"message": "success",
|
|
324
338
|
"data": {
|
|
325
339
|
"uid": 1234567890,
|
|
340
|
+
"userLevel": "黄V",
|
|
326
341
|
"readTrend30Days": [
|
|
327
342
|
{ "date": "2026-05-07", "totalReadCount": 12500 },
|
|
328
343
|
{ "date": "2026-05-06", "totalReadCount": 9800 }
|
|
@@ -473,8 +488,11 @@ node scripts/weibo-creator.js help
|
|
|
473
488
|
|
|
474
489
|
**第一步:判断当前状态**
|
|
475
490
|
|
|
476
|
-
|
|
477
|
-
|
|
491
|
+
根据 `userLevel` 字段直接判断当前认证等级:
|
|
492
|
+
|
|
493
|
+
- **已是黄V,尚未达到橙V**:`userLevel` 为 "黄V",且铁粉数 < 100 或近30天排水阅读量 < 30 万
|
|
494
|
+
- **已是橙V,尚未达到金V**:`userLevel` 为 "橙V",且粉丝量 < 1 万 或 铁粉数 < 1000 或 近30天排水阅读量 < 1000 万
|
|
495
|
+
- **已是金V**:`userLevel` 为 "金V"
|
|
478
496
|
|
|
479
497
|
**第二步:计算各项达标差距**
|
|
480
498
|
|
|
@@ -69,6 +69,7 @@ function request(method, url, data = null) {
|
|
|
69
69
|
*
|
|
70
70
|
* 返回结构(CreatorSummary)包含:
|
|
71
71
|
* - uid: 用户 uid
|
|
72
|
+
* - userLevel: 用户认证等级(如"金V"、"橙V"、"蓝V"、"黄V"、"普通用户"等)
|
|
72
73
|
* - readTrend30Days: 近30天每日阅读趋势(DailyReadData[])
|
|
73
74
|
* - readSourceSummary30Days: 近30日分场景阅读汇总(ReadSourceSummary)
|
|
74
75
|
* - postTrend30Days: 近30天每日发博趋势(DailyPostData[])
|
|
@@ -131,6 +132,7 @@ function printHelp() {
|
|
|
131
132
|
|
|
132
133
|
返回数据说明:
|
|
133
134
|
data.uid 用户 uid
|
|
135
|
+
data.userLevel 用户认证等级(如"金V"、"橙V"、"蓝V"、"黄V"、"普通用户"等)
|
|
134
136
|
data.readTrend30Days 近30天每日阅读趋势(date, totalReadCount)
|
|
135
137
|
data.readSourceSummary30Days 近30日分场景阅读汇总
|
|
136
138
|
.followReadCount / followReadRate 关注流阅读数/占比(私域)
|