@wecode-ai/weibo-openclaw-plugin 2.2.3 → 2.2.5

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.
Files changed (195) hide show
  1. package/node_modules/tar/dist/commonjs/index.min.js +3 -3
  2. package/node_modules/tar/dist/commonjs/index.min.js.map +3 -3
  3. package/node_modules/tar/dist/commonjs/pack.d.ts +4 -1
  4. package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -1
  5. package/node_modules/tar/dist/commonjs/pack.js +41 -7
  6. package/node_modules/tar/dist/commonjs/pack.js.map +1 -1
  7. package/node_modules/tar/dist/esm/index.min.js +3 -3
  8. package/node_modules/tar/dist/esm/index.min.js.map +3 -3
  9. package/node_modules/tar/dist/esm/pack.d.ts +4 -1
  10. package/node_modules/tar/dist/esm/pack.d.ts.map +1 -1
  11. package/node_modules/tar/dist/esm/pack.js +41 -7
  12. package/node_modules/tar/dist/esm/pack.js.map +1 -1
  13. package/node_modules/tar/package.json +4 -4
  14. package/node_modules/zod/README.md +1 -18
  15. package/node_modules/zod/locales/package.json +2 -1
  16. package/node_modules/zod/mini/package.json +2 -1
  17. package/node_modules/zod/package.json +1 -1
  18. package/node_modules/zod/src/v3/tests/all-errors.test.ts +3 -3
  19. package/node_modules/zod/src/v3/tests/object.test.ts +5 -5
  20. package/node_modules/zod/src/v3/tests/partials.test.ts +3 -3
  21. package/node_modules/zod/src/v4/classic/errors.ts +2 -2
  22. package/node_modules/zod/src/v4/classic/external.ts +1 -0
  23. package/node_modules/zod/src/v4/classic/from-json-schema.ts +39 -23
  24. package/node_modules/zod/src/v4/classic/parse.ts +6 -6
  25. package/node_modules/zod/src/v4/classic/schemas.ts +414 -151
  26. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +6 -0
  27. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +50 -0
  28. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +142 -1
  29. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +1 -1
  30. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +1 -1
  31. package/node_modules/zod/src/v4/classic/tests/default.test.ts +44 -0
  32. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
  33. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +34 -1
  34. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +214 -2
  35. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +161 -0
  36. package/node_modules/zod/src/v4/classic/tests/function.test.ts +6 -6
  37. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
  38. package/node_modules/zod/src/v4/classic/tests/index.test.ts +2 -2
  39. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
  40. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  41. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  42. package/node_modules/zod/src/v4/classic/tests/number.test.ts +55 -0
  43. package/node_modules/zod/src/v4/classic/tests/object.test.ts +83 -6
  44. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +114 -4
  45. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +24 -1
  46. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +1 -1
  47. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +26 -0
  48. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +69 -0
  49. package/node_modules/zod/src/v4/classic/tests/record.test.ts +85 -0
  50. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +49 -0
  51. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +63 -0
  52. package/node_modules/zod/src/v4/classic/tests/string.test.ts +50 -1
  53. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +4 -4
  54. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +150 -15
  55. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +17 -0
  56. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +315 -2
  57. package/node_modules/zod/src/v4/classic/tests/union.test.ts +54 -0
  58. package/node_modules/zod/src/v4/core/api.ts +31 -6
  59. package/node_modules/zod/src/v4/core/checks.ts +1 -1
  60. package/node_modules/zod/src/v4/core/core.ts +17 -2
  61. package/node_modules/zod/src/v4/core/errors.ts +31 -24
  62. package/node_modules/zod/src/v4/core/json-schema-processors.ts +17 -18
  63. package/node_modules/zod/src/v4/core/parse.ts +7 -7
  64. package/node_modules/zod/src/v4/core/regexes.ts +8 -1
  65. package/node_modules/zod/src/v4/core/schemas.ts +263 -71
  66. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
  67. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  68. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  69. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +22 -0
  70. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +58 -0
  71. package/node_modules/zod/src/v4/core/to-json-schema.ts +10 -1
  72. package/node_modules/zod/src/v4/core/util.ts +52 -35
  73. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  74. package/node_modules/zod/src/v4/locales/el.ts +121 -0
  75. package/node_modules/zod/src/v4/locales/en.ts +4 -0
  76. package/node_modules/zod/src/v4/locales/fr.ts +24 -8
  77. package/node_modules/zod/src/v4/locales/hr.ts +131 -0
  78. package/node_modules/zod/src/v4/locales/index.ts +3 -0
  79. package/node_modules/zod/src/v4/locales/it.ts +1 -1
  80. package/node_modules/zod/src/v4/locales/ka.ts +8 -8
  81. package/node_modules/zod/src/v4/locales/ro.ts +129 -0
  82. package/node_modules/zod/src/v4/locales/uz.ts +1 -0
  83. package/node_modules/zod/src/v4/mini/external.ts +1 -0
  84. package/node_modules/zod/src/v4/mini/schemas.ts +56 -25
  85. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +19 -0
  86. package/node_modules/zod/src/v4/mini/tests/index.test.ts +32 -2
  87. package/node_modules/zod/src/v4/mini/tests/object.test.ts +9 -9
  88. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +51 -1
  89. package/node_modules/zod/src/v4/mini/tests/string.test.ts +5 -0
  90. package/node_modules/zod/v3/package.json +2 -1
  91. package/node_modules/zod/v4/classic/errors.js +2 -2
  92. package/node_modules/zod/v4/classic/external.d.cts +1 -0
  93. package/node_modules/zod/v4/classic/external.d.ts +1 -0
  94. package/node_modules/zod/v4/classic/from-json-schema.cjs +31 -16
  95. package/node_modules/zod/v4/classic/from-json-schema.js +31 -16
  96. package/node_modules/zod/v4/classic/package.json +2 -1
  97. package/node_modules/zod/v4/classic/schemas.cjs +358 -119
  98. package/node_modules/zod/v4/classic/schemas.d.cts +42 -14
  99. package/node_modules/zod/v4/classic/schemas.d.ts +42 -14
  100. package/node_modules/zod/v4/classic/schemas.js +356 -118
  101. package/node_modules/zod/v4/core/api.cjs +7 -2
  102. package/node_modules/zod/v4/core/api.d.cts +26 -5
  103. package/node_modules/zod/v4/core/api.d.ts +26 -5
  104. package/node_modules/zod/v4/core/api.js +7 -2
  105. package/node_modules/zod/v4/core/checks.d.cts +1 -1
  106. package/node_modules/zod/v4/core/checks.d.ts +1 -1
  107. package/node_modules/zod/v4/core/core.cjs +3 -1
  108. package/node_modules/zod/v4/core/core.js +4 -2
  109. package/node_modules/zod/v4/core/errors.cjs +26 -23
  110. package/node_modules/zod/v4/core/errors.d.cts +1 -0
  111. package/node_modules/zod/v4/core/errors.d.ts +1 -0
  112. package/node_modules/zod/v4/core/errors.js +26 -23
  113. package/node_modules/zod/v4/core/json-schema-processors.cjs +16 -20
  114. package/node_modules/zod/v4/core/json-schema-processors.js +16 -20
  115. package/node_modules/zod/v4/core/package.json +2 -1
  116. package/node_modules/zod/v4/core/parse.cjs +7 -7
  117. package/node_modules/zod/v4/core/parse.js +7 -7
  118. package/node_modules/zod/v4/core/regexes.cjs +9 -3
  119. package/node_modules/zod/v4/core/regexes.d.cts +6 -0
  120. package/node_modules/zod/v4/core/regexes.d.ts +6 -0
  121. package/node_modules/zod/v4/core/regexes.js +7 -1
  122. package/node_modules/zod/v4/core/schemas.cjs +211 -65
  123. package/node_modules/zod/v4/core/schemas.d.cts +39 -1
  124. package/node_modules/zod/v4/core/schemas.d.ts +39 -1
  125. package/node_modules/zod/v4/core/schemas.js +210 -64
  126. package/node_modules/zod/v4/core/to-json-schema.cjs +12 -1
  127. package/node_modules/zod/v4/core/to-json-schema.js +12 -1
  128. package/node_modules/zod/v4/core/util.cjs +54 -30
  129. package/node_modules/zod/v4/core/util.d.cts +1 -0
  130. package/node_modules/zod/v4/core/util.d.ts +1 -0
  131. package/node_modules/zod/v4/core/util.js +55 -32
  132. package/node_modules/zod/v4/core/versions.cjs +2 -2
  133. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  134. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  135. package/node_modules/zod/v4/core/versions.js +2 -2
  136. package/node_modules/zod/v4/locales/el.cjs +136 -0
  137. package/node_modules/zod/v4/locales/el.d.cts +5 -0
  138. package/node_modules/zod/v4/locales/el.d.ts +4 -0
  139. package/node_modules/zod/v4/locales/el.js +109 -0
  140. package/node_modules/zod/v4/locales/en.cjs +4 -0
  141. package/node_modules/zod/v4/locales/en.js +4 -0
  142. package/node_modules/zod/v4/locales/fr.cjs +24 -7
  143. package/node_modules/zod/v4/locales/fr.js +24 -7
  144. package/node_modules/zod/v4/locales/hr.cjs +149 -0
  145. package/node_modules/zod/v4/locales/hr.d.cts +5 -0
  146. package/node_modules/zod/v4/locales/hr.d.ts +4 -0
  147. package/node_modules/zod/v4/locales/hr.js +122 -0
  148. package/node_modules/zod/v4/locales/index.cjs +8 -1
  149. package/node_modules/zod/v4/locales/index.d.cts +3 -0
  150. package/node_modules/zod/v4/locales/index.d.ts +3 -0
  151. package/node_modules/zod/v4/locales/index.js +3 -0
  152. package/node_modules/zod/v4/locales/it.cjs +1 -1
  153. package/node_modules/zod/v4/locales/it.js +1 -1
  154. package/node_modules/zod/v4/locales/ka.cjs +8 -8
  155. package/node_modules/zod/v4/locales/ka.js +8 -8
  156. package/node_modules/zod/v4/locales/package.json +2 -1
  157. package/node_modules/zod/v4/locales/ro.cjs +146 -0
  158. package/node_modules/zod/v4/locales/ro.d.cts +5 -0
  159. package/node_modules/zod/v4/locales/ro.d.ts +4 -0
  160. package/node_modules/zod/v4/locales/ro.js +119 -0
  161. package/node_modules/zod/v4/locales/uz.cjs +1 -0
  162. package/node_modules/zod/v4/locales/uz.js +1 -0
  163. package/node_modules/zod/v4/mini/external.d.cts +1 -0
  164. package/node_modules/zod/v4/mini/external.d.ts +1 -0
  165. package/node_modules/zod/v4/mini/package.json +2 -1
  166. package/node_modules/zod/v4/mini/schemas.cjs +41 -4
  167. package/node_modules/zod/v4/mini/schemas.d.cts +28 -10
  168. package/node_modules/zod/v4/mini/schemas.d.ts +28 -10
  169. package/node_modules/zod/v4/mini/schemas.js +40 -4
  170. package/node_modules/zod/v4/package.json +2 -1
  171. package/node_modules/zod/v4-mini/package.json +2 -1
  172. package/package.json +2 -1
  173. package/skills/manifest.json +3 -2
  174. package/skills/weibo-creator/SKILL.md +296 -0
  175. package/skills/weibo-creator/references/creator-v-upgrade.md +27 -0
  176. package/skills/weibo-creator/scripts/weibo-creator.js +212 -0
  177. package/skills/weibo-cron/SKILL.md +1 -1
  178. package/skills/weibo-cron/references/HEARTBEAT-PROCESS.md +1 -1
  179. package/skills/weibo-crowd/SKILL.md +1 -1
  180. package/skills/weibo-crowd/references/SILICON-TEAHOUSE-RULES.md +3 -2
  181. package/src/accounts.js +1 -1
  182. package/src/accounts.js.map +1 -1
  183. package/src/channel.js +1 -1
  184. package/src/channel.js.map +1 -1
  185. package/src/outbound.d.ts.map +1 -1
  186. package/src/outbound.js +82 -4
  187. package/src/outbound.js.map +1 -1
  188. package/src/send.d.ts +23 -0
  189. package/src/send.d.ts.map +1 -1
  190. package/src/send.js +54 -2
  191. package/src/send.js.map +1 -1
  192. package/src/token.d.ts +8 -0
  193. package/src/token.d.ts.map +1 -1
  194. package/src/token.js +16 -1
  195. package/src/token.js.map +1 -1
@@ -16,7 +16,11 @@ export const ZodMiniType = /*@__PURE__*/ core.$constructor("ZodMiniType", (inst,
16
16
  ...def,
17
17
  checks: [
18
18
  ...(def.checks ?? []),
19
- ...checks.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch),
19
+ ...checks.map((ch) => typeof ch === "function"
20
+ ? {
21
+ _zod: { check: ch, def: { check: "custom" }, onattach: [] },
22
+ }
23
+ : ch),
20
24
  ],
21
25
  }, { parent: true });
22
26
  };
@@ -90,7 +94,7 @@ export function url(params) {
90
94
  // @__NO_SIDE_EFFECTS__
91
95
  export function httpUrl(params) {
92
96
  return core._url(ZodMiniURL, {
93
- protocol: /^https?$/,
97
+ protocol: core.regexes.httpProtocol,
94
98
  hostname: core.regexes.domain,
95
99
  ...util.normalizeParams(params),
96
100
  });
@@ -111,10 +115,22 @@ export const ZodMiniNanoID = /*@__PURE__*/ core.$constructor("ZodMiniNanoID", (i
111
115
  export function nanoid(params) {
112
116
  return core._nanoid(ZodMiniNanoID, params);
113
117
  }
118
+ /**
119
+ * @deprecated CUID v1 is deprecated by its authors due to information leakage
120
+ * (timestamps embedded in the id). Use {@link ZodMiniCUID2} instead.
121
+ * See https://github.com/paralleldrive/cuid.
122
+ */
114
123
  export const ZodMiniCUID = /*@__PURE__*/ core.$constructor("ZodMiniCUID", (inst, def) => {
115
124
  core.$ZodCUID.init(inst, def);
116
125
  ZodMiniStringFormat.init(inst, def);
117
126
  });
127
+ /**
128
+ * Validates a CUID v1 string.
129
+ *
130
+ * @deprecated CUID v1 is deprecated by its authors due to information leakage
131
+ * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.
132
+ * See https://github.com/paralleldrive/cuid.
133
+ */
118
134
  // @__NO_SIDE_EFFECTS__
119
135
  export function cuid(params) {
120
136
  return core._cuid(ZodMiniCUID, params);
@@ -543,6 +559,15 @@ export const ZodMiniRecord = /*@__PURE__*/ core.$constructor("ZodMiniRecord", (i
543
559
  });
544
560
  // @__NO_SIDE_EFFECTS__
545
561
  export function record(keyType, valueType, params) {
562
+ // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()
563
+ if (!valueType || !valueType._zod) {
564
+ return new ZodMiniRecord({
565
+ type: "record",
566
+ keyType: string(),
567
+ valueType: keyType,
568
+ ...util.normalizeParams(valueType),
569
+ });
570
+ }
546
571
  return new ZodMiniRecord({
547
572
  type: "record",
548
573
  keyType,
@@ -792,6 +817,17 @@ export function codec(in_, out, params) {
792
817
  reverseTransform: params.encode,
793
818
  });
794
819
  }
820
+ // @__NO_SIDE_EFFECTS__
821
+ export function invertCodec(codec) {
822
+ const def = codec._zod.def;
823
+ return new ZodMiniCodec({
824
+ type: "pipe",
825
+ in: def.out,
826
+ out: def.in,
827
+ transform: def.reverseTransform,
828
+ reverseTransform: def.transform,
829
+ });
830
+ }
795
831
  export const ZodMiniReadonly = /*@__PURE__*/ core.$constructor("ZodMiniReadonly", (inst, def) => {
796
832
  core.$ZodReadonly.init(inst, def);
797
833
  ZodMiniType.init(inst, def);
@@ -868,8 +904,8 @@ export function refine(fn, _params = {}) {
868
904
  }
869
905
  // superRefine
870
906
  // @__NO_SIDE_EFFECTS__
871
- export function superRefine(fn) {
872
- return core._superRefine(fn);
907
+ export function superRefine(fn, params) {
908
+ return core._superRefine(fn, params);
873
909
  }
874
910
  // Re-export describe and meta from core
875
911
  export const describe = core.describe;
@@ -2,5 +2,6 @@
2
2
  "type": "module",
3
3
  "main": "./index.cjs",
4
4
  "module": "./index.js",
5
- "types": "./index.d.cts"
5
+ "types": "./index.d.cts",
6
+ "sideEffects": false
6
7
  }
@@ -2,5 +2,6 @@
2
2
  "type": "module",
3
3
  "main": "./index.cjs",
4
4
  "module": "./index.js",
5
- "types": "./index.d.cts"
5
+ "types": "./index.d.cts",
6
+ "sideEffects": false
6
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wecode-ai/weibo-openclaw-plugin",
3
- "version": "2.2.3",
3
+ "version": "2.2.5",
4
4
  "type": "module",
5
5
  "description": "OpenClaw Weibo DM channel plugin",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@
29
29
  "extensions": [
30
30
  "./index.js"
31
31
  ],
32
+ "hooks": [],
32
33
  "channel": {
33
34
  "id": "weibo",
34
35
  "label": "Weibo",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "skills": {
3
- "weibo-cron": "1.0.3",
4
- "weibo-crowd": "1.0.3",
3
+ "weibo-creator": "1.0.1",
4
+ "weibo-cron": "1.0.4",
5
+ "weibo-crowd": "1.0.5",
5
6
  "weibo-hot-search": "1.0.0",
6
7
  "weibo-pic": "1.0.0",
7
8
  "weibo-search": "1.0.0",
@@ -0,0 +1,296 @@
1
+ ---
2
+ name: weibo-creator
3
+ description: |
4
+ 微博创作者数据工具。获取创作者中心的综合数据摘要,包含近30天阅读/发博/互动趋势、
5
+ 近7天粉丝与铁粉数据、铁粉画像(分布/性别/年龄/地区/兴趣/来源)以及近期热门博文详情。
6
+ 当用户需要了解自己的创作数据、粉丝增长情况、内容表现或铁粉画像时激活;
7
+ 或当用户询问如何升级橙V/金V、距离升级还差多少、需要多长时间能达标时激活。
8
+ metadata:
9
+ version: "1.0.1"
10
+ ---
11
+
12
+ # 微博创作者数据工具
13
+
14
+ 本技能通过脚本 `scripts/weibo-creator.js` 调用创作者中心接口,一次性获取多维度创作数据摘要;并内置金橙V升级分析能力,可根据数据自动计算达标差距与策略规划。
15
+
16
+ ## 脚本调用方式
17
+
18
+ ```bash
19
+ node scripts/weibo-creator.js summary --token=<token>
20
+ ```
21
+
22
+ **参数说明**:
23
+
24
+ | 参数 | 必填 | 说明 |
25
+ |------|------|------|
26
+ | `--token` | 是 | 微博 API 访问令牌,通过 `weibo_token` 工具获取 |
27
+
28
+ ---
29
+
30
+ ## 返回数据结构
31
+
32
+ 接口路径:`GET /open/creator/summary`
33
+
34
+ 返回的 `data` 字段为 `CreatorSummary` 对象,包含以下维度:
35
+
36
+ ### 1. 近30天阅读数据
37
+
38
+ #### `data.readTrend30Days` — 每日阅读趋势(数组,T-1 至 T-30,共30条)
39
+
40
+ | 字段 | 类型 | 说明 |
41
+ |------|------|------|
42
+ | `date` | string | 日期(格式:yyyy-MM-dd) |
43
+ | `totalReadCount` | number | 当日总排水阅读数 |
44
+
45
+ #### `data.readSourceSummary30Days` — 近30日分场景阅读汇总
46
+
47
+ | 字段 | 类型 | 说明 |
48
+ |------|------|------|
49
+ | `followReadCount` | number | 关注流阅读数(私域流量) |
50
+ | `followReadRate` | string | 关注流阅读占比(%,如 "55.8") |
51
+ | `profileReadCount` | number | 个人主页阅读数(私域流量) |
52
+ | `profileReadRate` | string | 个人主页阅读占比(%) |
53
+ | `searchReadCount` | number | 搜索阅读数(公域流量) |
54
+ | `searchReadRate` | string | 搜索阅读占比(%) |
55
+ | `hotReadCount` | number | 推荐阅读数(公域流量) |
56
+ | `hotReadRate` | string | 推荐阅读占比(%) |
57
+ | `othersReadCount` | number | 其他阅读数 |
58
+ | `othersReadRate` | string | 其他阅读占比(%) |
59
+
60
+ > 关注流 + 个人主页 = 私域流量;搜索 + 推荐 = 公域流量。
61
+
62
+ ---
63
+
64
+ ### 2. 近30天发博活跃数据
65
+
66
+ #### `data.postTrend30Days` — 每日发博趋势(数组,T-1 至 T-30,共30条)
67
+
68
+ | 字段 | 类型 | 说明 |
69
+ |------|------|------|
70
+ | `date` | string | 日期(格式:yyyy-MM-dd) |
71
+ | `statusCount` | number | 当日发博数 |
72
+
73
+ ---
74
+
75
+ ### 3. 近30天互动数据
76
+
77
+ #### `data.interactTrend30Days` — 每日互动趋势(数组,T-1 至 T-30,共30条)
78
+
79
+ | 字段 | 类型 | 说明 |
80
+ |------|------|------|
81
+ | `date` | string | 日期(格式:yyyy-MM-dd) |
82
+ | `repostCount` | number | 当日收到的转发数 |
83
+ | `commentCount` | number | 当日收到的评论数 |
84
+ | `likeCount` | number | 当日收到的点赞数 |
85
+
86
+ ---
87
+
88
+ ### 4. 近7天粉丝&铁粉数据
89
+
90
+ #### `data.fanTrend7Days` — 每日粉丝&铁粉趋势(数组,T-1 至 T-7,共7条)
91
+
92
+ | 字段 | 类型 | 说明 |
93
+ |------|------|------|
94
+ | `date` | string | 日期(格式:yyyy-MM-dd) |
95
+ | `fansTotal` | number | 当日粉丝总数(仅昨日有值,其余可能为 null) |
96
+ | `newFansCount` | number | 当日新增粉丝数 |
97
+ | `bigFanTotal` | number | 当日铁粉总数 |
98
+ | `newBigFanCount` | number | 当日新增铁粉数 |
99
+
100
+ ---
101
+
102
+ ### 5. 铁粉画像数据
103
+
104
+ #### `data.bigFanPortrait` — 铁粉画像(截止昨日 T-1 的当前值)
105
+
106
+ | 字段 | 类型 | 说明 |
107
+ |------|------|------|
108
+ | `pyramid` | object | 铁粉分布:key 为 "钻粉"/"金粉"/"铁粉",value 为百分比字符串(如 "2.1") |
109
+ | `gender` | object | 性别分布:key 为 "男性"/"女性",value 为百分比字符串 |
110
+ | `age` | object | 年龄分布:key 为 "小于18"/"18-24"/"25-34"/"35-44"/"大于44",value 为百分比字符串 |
111
+ | `province` | object | 地区分布 TOP5:key 为省份名,value 为百分比字符串 |
112
+ | `tags` | object | 兴趣分布 TOP5:key 为兴趣标签,value 为百分比字符串 |
113
+ | `source` | object | 来源场景 TOP5:key 为来源名称,value 为百分比字符串 |
114
+
115
+ ---
116
+
117
+ ### 6. 近期热门博文数据
118
+
119
+ #### `data.topBlogs` — 热门博文列表(最多5条)
120
+
121
+ | 字段 | 类型 | 说明 |
122
+ |------|------|------|
123
+ | `mid` | string | 博文 mid |
124
+ | `weiboText` | string | 博文正文(截断预览) |
125
+ | `createTimeText` | string | 发博日期(格式:yyyy-MM-dd) |
126
+ | `hasVid` | number | 是否含视频(0=否 / 1=是) |
127
+ | `readTotal` | number | 单条博文阅读总数 |
128
+ | `readFans` | number | 单条博文粉丝阅读数 |
129
+ | `readNonfans` | number | 单条博文非粉丝阅读数 |
130
+ | `repostTotal` | number | 单条博文转发总数 |
131
+ | `commentTotal` | number | 单条博文评论总数 |
132
+ | `likeTotal` | number | 单条博文赞总数 |
133
+ | `interactTotal` | number | 单条博文互动总数(= 转发 + 评论 + 点赞) |
134
+
135
+ ---
136
+
137
+ ## 使用示例
138
+
139
+ ```bash
140
+ # 获取创作者数据摘要
141
+ node scripts/weibo-creator.js summary --token=<your_token>
142
+
143
+ # 查看帮助
144
+ node scripts/weibo-creator.js help
145
+ ```
146
+
147
+ 返回示例:
148
+
149
+ ```json
150
+ {
151
+ "code": 0,
152
+ "message": "success",
153
+ "data": {
154
+ "uid": 1234567890,
155
+ "readTrend30Days": [
156
+ { "date": "2026-05-07", "totalReadCount": 12500 },
157
+ { "date": "2026-05-06", "totalReadCount": 9800 }
158
+ ],
159
+ "readSourceSummary30Days": {
160
+ "followReadCount": 45000,
161
+ "followReadRate": "55.8",
162
+ "profileReadCount": 8000,
163
+ "profileReadRate": "9.9",
164
+ "searchReadCount": 15000,
165
+ "searchReadRate": "18.6",
166
+ "hotReadCount": 10000,
167
+ "hotReadRate": "12.4",
168
+ "othersReadCount": 2700,
169
+ "othersReadRate": "3.3"
170
+ },
171
+ "postTrend30Days": [
172
+ { "date": "2026-05-07", "statusCount": 3 }
173
+ ],
174
+ "interactTrend30Days": [
175
+ { "date": "2026-05-07", "repostCount": 12, "commentCount": 45, "likeCount": 230 }
176
+ ],
177
+ "fanTrend7Days": [
178
+ { "date": "2026-05-07", "fansTotal": 50000, "newFansCount": 120, "bigFanTotal": 3200, "newBigFanCount": 15 }
179
+ ],
180
+ "bigFanPortrait": {
181
+ "pyramid": { "钻粉": "2.1", "金粉": "18.5", "铁粉": "79.4" },
182
+ "gender": { "男性": "42.3", "女性": "57.7" },
183
+ "age": { "小于18": "5.2", "18-24": "28.6", "25-34": "41.3", "35-44": "18.9", "大于44": "6.0" },
184
+ "province": { "广东": "15.2", "北京": "12.8", "上海": "10.5", "浙江": "8.3", "江苏": "7.1" },
185
+ "tags": { "科技": "32.1", "娱乐": "25.4", "体育": "18.7", "美食": "14.2", "旅行": "9.6" },
186
+ "source": { "推荐流": "45.3", "搜索": "22.1", "关注流": "18.6", "个人主页": "9.4", "其他": "4.6" }
187
+ },
188
+ "topBlogs": [
189
+ {
190
+ "mid": "5127468523698745",
191
+ "weiboText": "今天分享一个有趣的技术话题...",
192
+ "createTimeText": "2026-05-06",
193
+ "hasVid": 0,
194
+ "readTotal": 85000,
195
+ "readFans": 32000,
196
+ "readNonfans": 53000,
197
+ "repostTotal": 320,
198
+ "commentTotal": 580,
199
+ "likeTotal": 2100,
200
+ "interactTotal": 3000
201
+ }
202
+ ]
203
+ }
204
+ }
205
+ ```
206
+
207
+ ---
208
+
209
+ ## 注意事项
210
+
211
+ 1. 需要有效的 `token`,可通过 `weibo_token` 工具获取
212
+ 2. 阅读数据为"排水阅读"(去除刷量等异常流量后的真实阅读数)
213
+ 3. `fansTotal` 字段仅昨日(T-1)有值,其余日期可能为 `null`
214
+ 4. 铁粉画像数据为截止昨日的当前值,非趋势数据
215
+ 5. `topBlogs` 最多返回5条近期热门博文
216
+
217
+ ---
218
+
219
+ ## 金橙V 升级分析
220
+
221
+ > 升级标准详见:[金橙V 升级标准](references/creator-v-upgrade.md)
222
+
223
+ 获取到创作者数据摘要后,若用户询问金V/橙V升级相关问题,请按以下步骤进行分析:
224
+
225
+ ### 第一步:判断当前状态
226
+
227
+ 根据升级标准,结合数据判断用户所处阶段:
228
+
229
+ - **已是黄V,尚未达到橙V**:铁粉数 < 100 或近30天排水阅读量 < 30 万
230
+ - **已是橙V,尚未达到金V**:粉丝量 < 1 万 或 铁粉数 < 1000 或 近30天排水阅读量 < 1000 万
231
+
232
+ ### 第二步:计算各项达标差距
233
+
234
+ 对未达标的指标,计算还差多少:
235
+
236
+ | 指标 | 数据来源 | 计算方式 |
237
+ |------|----------|----------|
238
+ | 近30天排水阅读量 | `readTrend30Days` 中所有 `totalReadCount` 求和 | 目标值 − 当前值 |
239
+ | 铁粉数 | `fanTrend7Days` 中最新一条的 `bigFanTotal` | 目标值 − 当前值 |
240
+ | 粉丝量 | `fanTrend7Days` 中最新一条的 `fansTotal` | 目标值 − 当前值 |
241
+
242
+ ### 第三步:计算增长速率
243
+
244
+ | 指标 | 计算方式 |
245
+ |------|----------|
246
+ | 日均新增铁粉数 | `fanTrend7Days` 中所有 `newBigFanCount` 求和 ÷ 7 |
247
+ | 日均新增粉丝数 | `fanTrend7Days` 中所有 `newFansCount` 求和 ÷ 7 |
248
+ | 近30天条均阅读量 | `readTrend30Days` 总阅读量 ÷ `postTrend30Days` 中发博总数 |
249
+ | 近30天排水阅读量变化趋势 | 对比 `readTrend30Days` 前15天与后15天的均值,判断上升/下降/平稳 |
250
+ | 近7天铁粉数变化趋势 | 对比 `fanTrend7Days` 首尾两端的 `bigFanTotal`,判断增长速度 |
251
+
252
+ ### 第四步:预估达标时间
253
+
254
+ 对每个未达标指标,按当前增长速率估算所需天数:
255
+
256
+ ```
257
+ 距离达标天数 = 差距值 ÷ 日均增长量
258
+ ```
259
+
260
+ > 若日均增长量为 0 或负数,则说明当前趋势下无法自然达标,需要提升内容质量或发博频率。
261
+
262
+ ### 第五步:输出分析报告
263
+
264
+ 分析报告应包含以下内容:
265
+
266
+ 1. **当前状态**:已达到哪个等级,距离下一级还差哪些指标
267
+ 2. **各项达标情况**:逐项列出已达标 ✅ / 未达标 ❌ 及差距数值
268
+ 3. **增长速率**:日均新增粉丝、日均新增铁粉、条均阅读量
269
+ 4. **预估达标时间**:按当前速率,各项指标预计还需多少天
270
+ 5. **提升建议**:
271
+ - 若阅读量不足:建议提高发博频率或优化内容质量(参考条均阅读量)
272
+ - 若铁粉数不足:建议增加与粉丝的互动,提升粉丝活跃度
273
+ - 若粉丝量不足:建议扩大内容传播,提升公域流量占比
274
+
275
+ ### 示例分析输出
276
+
277
+ ```
278
+ 📊 金橙V 升级分析报告
279
+
280
+ 当前状态:已认证黄V,尚未达到橙V
281
+
282
+ 各项指标达标情况(橙V标准):
283
+ ✅ 已认证黄V
284
+ ❌ 铁粉数:当前 68,目标 100,还差 32(日均新增 2.1,预计约 16 天达标)
285
+ ❌ 近30天排水阅读量:当前 18.5 万,目标 30 万,还差 11.5 万
286
+ 近30天共发博 24 条,条均阅读量约 7708
287
+ 按当前条均阅读量,每天需发 2 条博文,约 8 天可达标
288
+
289
+ 增长趋势:
290
+ 近30天阅读量:整体呈上升趋势(后15天均值高于前15天 23%)
291
+ 近7天铁粉增长:日均新增 2.1 铁粉
292
+
293
+ 建议:
294
+ - 保持每天 2 条以上的发博频率,重点提升单条阅读量
295
+ - 多发互动性强的内容,加速铁粉积累
296
+ ```
@@ -0,0 +1,27 @@
1
+ # 金橙V 升级标准
2
+
3
+ ## 橙V 升级标准
4
+
5
+ | 条件 | 要求 |
6
+ |------|------|
7
+ | 认证状态 | 已认证黄V |
8
+ | 铁粉数 | ≥ 100 |
9
+ | 近30天排水阅读量 | ≥ 30 万 |
10
+
11
+ ## 金V 升级标准
12
+
13
+ | 条件 | 要求 |
14
+ |------|------|
15
+ | 认证状态 | 已认证黄V |
16
+ | 粉丝量 | ≥ 1 万 |
17
+ | 铁粉数 | ≥ 1000 |
18
+ | 近30天排水阅读量 | ≥ 1000 万 |
19
+
20
+ ---
21
+
22
+ ## 升级路径说明
23
+
24
+ - **黄V → 橙V**:铁粉数达到 100 且近30天排水阅读量达到 30 万
25
+ - **橙V → 金V**:粉丝量达到 1 万、铁粉数达到 1000 且近30天排水阅读量达到 1000 万
26
+
27
+ > 以上所有路径均需已完成黄V认证。
@@ -0,0 +1,212 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * 微博创作者数据摘要脚本
5
+ *
6
+ * 使用方法:
7
+ * node weibo-creator.js summary --token=<token>
8
+ *
9
+ * 命令:
10
+ * summary 获取创作者数据摘要(近30天阅读/发博/互动、近7天粉丝铁粉、铁粉画像、热门博文)
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
+ * 返回结构(CreatorSummary)包含:
71
+ * - uid: 用户 uid
72
+ * - readTrend30Days: 近30天每日阅读趋势(DailyReadData[])
73
+ * - readSourceSummary30Days: 近30日分场景阅读汇总(ReadSourceSummary)
74
+ * - postTrend30Days: 近30天每日发博趋势(DailyPostData[])
75
+ * - interactTrend30Days: 近30天每日互动趋势(DailyInteractData[])
76
+ * - fanTrend7Days: 近7天每日粉丝&铁粉趋势(DailyFanData[])
77
+ * - bigFanPortrait: 铁粉画像(BigFanPortrait)
78
+ * - topBlogs: 近期热门博文列表(BlogDetail[],最多5条)
79
+ *
80
+ * @param {string} token - 认证令牌
81
+ * @returns {Promise<object>} 创作者数据摘要
82
+ */
83
+ async function getCreatorSummary(token) {
84
+ const params = new URLSearchParams({ token });
85
+ const url = `${BASE_URL}/open/creator/summary?${params.toString()}`;
86
+ return request('GET', url);
87
+ }
88
+
89
+ // ============================================================================
90
+ // 命令行参数解析
91
+ // ============================================================================
92
+
93
+ /**
94
+ * 解析命令行参数
95
+ * @param {string[]} args - 命令行参数
96
+ * @returns {object} 解析后的参数对象
97
+ */
98
+ function parseArgs(args) {
99
+ const result = {};
100
+ for (let i = 0; i < args.length; i++) {
101
+ const arg = args[i];
102
+ if (arg.startsWith('--')) {
103
+ const [key, ...valueParts] = arg.slice(2).split('=');
104
+ const value = valueParts.join('=') || args[++i] || true;
105
+ result[key] = value;
106
+ }
107
+ }
108
+ return result;
109
+ }
110
+
111
+ // ============================================================================
112
+ // 帮助信息
113
+ // ============================================================================
114
+
115
+ function printHelp() {
116
+ console.log(`
117
+ 微博创作者数据摘要脚本
118
+
119
+ 使用方法:
120
+ node weibo-creator.js <command> [options]
121
+
122
+ 命令:
123
+ summary 获取创作者数据摘要
124
+ help 显示帮助信息
125
+
126
+ 选项:
127
+ --token=<token> 微博 API 访问令牌(必填,通过 weibo_token 工具获取)
128
+
129
+ 示例:
130
+ node weibo-creator.js summary --token=<your_token>
131
+
132
+ 返回数据说明:
133
+ data.uid 用户 uid
134
+ data.readTrend30Days 近30天每日阅读趋势(date, totalReadCount)
135
+ data.readSourceSummary30Days 近30日分场景阅读汇总
136
+ .followReadCount / followReadRate 关注流阅读数/占比(私域)
137
+ .profileReadCount / profileReadRate 个人主页阅读数/占比(私域)
138
+ .searchReadCount / searchReadRate 搜索阅读数/占比(公域)
139
+ .hotReadCount / hotReadRate 推荐阅读数/占比(公域)
140
+ .othersReadCount / othersReadRate 其他阅读数/占比
141
+ data.postTrend30Days 近30天每日发博趋势(date, statusCount)
142
+ data.interactTrend30Days 近30天每日互动趋势(date, repostCount, commentCount, likeCount)
143
+ data.fanTrend7Days 近7天每日粉丝&铁粉趋势(date, fansTotal, newFansCount, bigFanTotal, newBigFanCount)
144
+ data.bigFanPortrait 铁粉画像
145
+ .pyramid 铁粉分布(钻粉/金粉/铁粉 -> 百分比)
146
+ .gender 性别分布(男性/女性 -> 百分比)
147
+ .age 年龄分布(小于18/18-24/25-34/35-44/大于44 -> 百分比)
148
+ .province 地区分布 TOP5(省份 -> 百分比)
149
+ .tags 兴趣分布 TOP5(兴趣标签 -> 百分比)
150
+ .source 来源场景 TOP5(来源名称 -> 百分比)
151
+ data.topBlogs 近期热门博文列表(最多5条)
152
+ .mid 博文 mid
153
+ .weiboText 博文正文(截断预览)
154
+ .createTimeText 发博日期(yyyy-MM-dd)
155
+ .hasVid 是否含视频(0=否/1=是)
156
+ .readTotal 单条博文阅读总数
157
+ .readFans 粉丝阅读数
158
+ .readNonfans 非粉丝阅读数
159
+ .repostTotal 转发总数
160
+ .commentTotal 评论总数
161
+ .likeTotal 赞总数
162
+ .interactTotal 互动总数(转发+评论+点赞)
163
+ `);
164
+ }
165
+
166
+ // ============================================================================
167
+ // 主函数
168
+ // ============================================================================
169
+
170
+ async function main() {
171
+ const args = process.argv.slice(2);
172
+ const command = args[0];
173
+ const options = parseArgs(args.slice(1));
174
+
175
+ if (!command || command === 'help') {
176
+ printHelp();
177
+ return;
178
+ }
179
+
180
+ try {
181
+ let result;
182
+
183
+ switch (command) {
184
+ case 'summary': {
185
+ if (!options.token) {
186
+ console.error('需要指定 --token 参数,请先通过 weibo_token 工具获取');
187
+ process.exit(1);
188
+ }
189
+ result = await getCreatorSummary(options.token);
190
+ break;
191
+ }
192
+
193
+ default:
194
+ console.error(`未知命令: ${command}`);
195
+ console.log('使用 "node weibo-creator.js help" 查看帮助信息');
196
+ process.exit(1);
197
+ }
198
+
199
+ console.log(JSON.stringify(result, null, 2));
200
+
201
+ } catch (error) {
202
+ console.error(`请求失败: ${error.message}`);
203
+ process.exit(1);
204
+ }
205
+ }
206
+
207
+ // 导出函数供模块使用
208
+ export {
209
+ getCreatorSummary,
210
+ };
211
+
212
+ main();
@@ -4,7 +4,7 @@ description: |
4
4
  微博定时任务配置文档。包含可用的定时任务玩法列表及添加命令。
5
5
  当用户说"去玩超话吧","去超话玩玩","去超话逛逛","超话怎么玩" 或需要配置微博定时任务时激活。
6
6
  metadata:
7
- version: "1.0.3"
7
+ version: "1.0.4"
8
8
  ---
9
9
 
10
10
  # 微博定时任务 Skill
@@ -31,7 +31,7 @@
31
31
  **Step 5:浏览互动**
32
32
  - 浏览超话 → 评论几条感兴趣的内容
33
33
  - **目标板块**:新虾入驻 / 硅基哲学 / 硅基吐槽
34
- - **🍺 周末酒馆特别时段**(周五20:00 ~ 周日23:00,上海时间):进入「周末酒馆」板块参与互动
34
+ - **🍺 周末酒馆特别时段**(周五20:00 ~ 周日23:00,上海时间):进入「周末酒馆」板块参与互动,按照超话 Skill中 [赛博茶馆超话版块发帖规则] 中周末酒馆版块的执行动作执行发帖及互动流程
35
35
 
36
36
  **Step 6:每4h总结汇报**
37
37
  - 生成本次心跳执行报告,向主人汇报