@wecode-ai/weibo-openclaw-plugin 2.2.9 → 2.2.11
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 +512 -0
- package/skills/weibo-adincentive/scripts/weibo-adincentive.js +217 -0
- package/skills/weibo-creator/SKILL.md +37 -9
- 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条)
|
|
@@ -219,15 +233,25 @@ node scripts/weibo-creator.js summary --token=<token>
|
|
|
219
233
|
|
|
220
234
|
#### `data.groupDetails` — 单个粉丝群活跃数据列表(数组,每个群一条)
|
|
221
235
|
|
|
236
|
+
**T-1 当前值字段**:
|
|
237
|
+
|
|
222
238
|
| 字段 | 类型 | 说明 |
|
|
223
239
|
|------|------|------|
|
|
224
240
|
| `gid` | string | 粉丝群 ID |
|
|
225
241
|
| `name` | string | 粉丝群名称 |
|
|
226
|
-
| `
|
|
227
|
-
| `
|
|
228
|
-
| `
|
|
229
|
-
|
|
230
|
-
|
|
242
|
+
| `genderRate` | object | 群内性别分布:key 为 "男"/"女",value 为百分比整数字符串(如 "56") |
|
|
243
|
+
| `bigfanRate` | string | 铁粉占比(T-1 日,%) |
|
|
244
|
+
| `loveFanRate` | string | 真爱粉占比(T-1 日,%) |
|
|
245
|
+
|
|
246
|
+
**近7日趋势字段**(每个字段均为数组,共7条,每条含 `date`(yyyy-MM-dd)和 `num`(指标值字符串)):
|
|
247
|
+
|
|
248
|
+
| 字段 | 说明 |
|
|
249
|
+
|------|------|
|
|
250
|
+
| `memberCountTrend` | 单个群成员人数近7日趋势 |
|
|
251
|
+
| `openCountTrend` | 单个群打开人数近7日趋势 |
|
|
252
|
+
| `speakCountTrend` | 单个群发言人数近7日趋势 |
|
|
253
|
+
| `speakTimesTrend` | 单个群发言条数近7日趋势 |
|
|
254
|
+
| `joinCountTrend` | 单个群进群人数近7日趋势 |
|
|
231
255
|
|
|
232
256
|
---
|
|
233
257
|
|
|
@@ -313,6 +337,7 @@ node scripts/weibo-creator.js help
|
|
|
313
337
|
"message": "success",
|
|
314
338
|
"data": {
|
|
315
339
|
"uid": 1234567890,
|
|
340
|
+
"userLevel": "黄V",
|
|
316
341
|
"readTrend30Days": [
|
|
317
342
|
{ "date": "2026-05-07", "totalReadCount": 12500 },
|
|
318
343
|
{ "date": "2026-05-06", "totalReadCount": 9800 }
|
|
@@ -463,8 +488,11 @@ node scripts/weibo-creator.js help
|
|
|
463
488
|
|
|
464
489
|
**第一步:判断当前状态**
|
|
465
490
|
|
|
466
|
-
|
|
467
|
-
|
|
491
|
+
根据 `userLevel` 字段直接判断当前认证等级:
|
|
492
|
+
|
|
493
|
+
- **已是黄V,尚未达到橙V**:`userLevel` 为 "黄V",且铁粉数 < 100 或近30天排水阅读量 < 30 万
|
|
494
|
+
- **已是橙V,尚未达到金V**:`userLevel` 为 "橙V",且粉丝量 < 1 万 或 铁粉数 < 1000 或 近30天排水阅读量 < 1000 万
|
|
495
|
+
- **已是金V**:`userLevel` 为 "金V"
|
|
468
496
|
|
|
469
497
|
**第二步:计算各项达标差距**
|
|
470
498
|
|
|
@@ -625,7 +653,7 @@ node scripts/weibo-creator.js help
|
|
|
625
653
|
|
|
626
654
|
**第四步:分析各群详情(如有多个群)**
|
|
627
655
|
|
|
628
|
-
从 `groupDetails` 中对比各群的 `
|
|
656
|
+
从 `groupDetails` 中对比各群的 `bigfanRate`,以及 `speakCountTrend`、`memberCountTrend` 近7日趋势,找出最活跃的群和需要重点运营的群。
|
|
629
657
|
|
|
630
658
|
**第五步:输出分析报告**
|
|
631
659
|
|
|
@@ -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 关注流阅读数/占比(私域)
|