@social-data/social-neuron-subscription 1.0.8 → 1.0.10

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/manifest.json CHANGED
@@ -1,10 +1,128 @@
1
1
  {
2
- "revision": 6,
2
+ "revision": 9,
3
3
  "capability": "subscription",
4
4
  "command": "social-neuron-subscription",
5
5
  "default_action": null,
6
6
  "mcp_path": "/subscription/mcp",
7
7
  "tools": [
8
+ {
9
+ "action": "get-field-values",
10
+ "op": "get_field_values",
11
+ "name": "subscription/get_field_values",
12
+ "summary": "取字段值字典 [{code, value}];**仅在需要把导出的码值换成中文时按需取用**。",
13
+ "description": "取字段值字典 [{code, value}];**仅在需要把导出的码值换成中文时按需取用**。\n\n枚举字段与编码字段统一走这里(值从哪来是元数据内部的事,对外只有\"有没有字典\"之分)。\n\n换值**不是订阅的标准步骤**:导出文件默认按大库原值交付,只有调用方(或其用户)明确要求\n中文时才用这份字典自行替换 —— 系统不做出参自动回显,也不读产出的文件。\n\n**空列表原样返回**:不在出参里猜原因 —— \"该字段真是明文(本就无字典)\"与\"元数据侧没配值来源\"\n在出参上无法区分,猜错反而误导(说成\"直接当原值用\"会让调用方把一列 code 当中文发出去)。",
14
+ "input_schema": {
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "field": {
18
+ "description": "字段 name_en(取自 list_fields);仅 is_enum / is_code 为真的字段有值字典(按需取用:只有要把导出的码值换成中文时才需要)",
19
+ "title": "Field",
20
+ "type": "string"
21
+ },
22
+ "keyword": {
23
+ "anyOf": [
24
+ {
25
+ "maxLength": 64,
26
+ "type": "string"
27
+ },
28
+ {
29
+ "type": "null"
30
+ }
31
+ ],
32
+ "default": null,
33
+ "description": "按中文值 / code 模糊过滤(如品牌搜「兰」);不传=全量,编码类字段(品牌/品类标签)可上千条,建议带",
34
+ "title": "Keyword"
35
+ }
36
+ },
37
+ "required": [
38
+ "field"
39
+ ],
40
+ "title": "SubFieldValuesInput",
41
+ "type": "object"
42
+ },
43
+ "output_schema": {
44
+ "$defs": {
45
+ "SubFieldValue": {
46
+ "additionalProperties": false,
47
+ "description": "值字典的一项。\n\n刻意**不复用** ``commons.metadata.schemas.values.FieldValue``:那是元数据面的内部契约,\n字段说明里带着上游系统的字段名(``tagCode`` / ``tagName`` 之类),对外没有意义也不该暴露。\n这里只说调用方需要知道的两件事:导出列里存的是什么、对应的中文是什么。",
48
+ "properties": {
49
+ "code": {
50
+ "description": "编码值 —— 导出列里实际存的那个值(如 1、V200500020023)",
51
+ "title": "Code",
52
+ "type": "string"
53
+ },
54
+ "value": {
55
+ "description": "该编码值对应的中文",
56
+ "title": "Value",
57
+ "type": "string"
58
+ }
59
+ },
60
+ "required": [
61
+ "code",
62
+ "value"
63
+ ],
64
+ "title": "SubFieldValue",
65
+ "type": "object"
66
+ }
67
+ },
68
+ "additionalProperties": false,
69
+ "properties": {
70
+ "field": {
71
+ "description": "字段 name_en(回显入参)",
72
+ "title": "Field",
73
+ "type": "string"
74
+ },
75
+ "items": {
76
+ "description": "值字典 [{code, value}]:code 是导出列里存的值,value 是对应中文;明文字段无字典,返回空列表",
77
+ "items": {
78
+ "$ref": "#/$defs/SubFieldValue"
79
+ },
80
+ "title": "Items",
81
+ "type": "array"
82
+ },
83
+ "total": {
84
+ "description": "值总数",
85
+ "title": "Total",
86
+ "type": "integer"
87
+ }
88
+ },
89
+ "required": [
90
+ "field",
91
+ "items",
92
+ "total"
93
+ ],
94
+ "title": "SubFieldValueList",
95
+ "type": "object"
96
+ },
97
+ "flags": [
98
+ {
99
+ "flag": "--field",
100
+ "field": "field",
101
+ "type": "string",
102
+ "required": true,
103
+ "desc": "字段 name_en(取自 list_fields);仅 is_enum / is_code 为真的字段有值字典(按需取用:只有要把导出的码值换成中文时才需要)"
104
+ },
105
+ {
106
+ "flag": "--keyword",
107
+ "field": "keyword",
108
+ "type": "string",
109
+ "required": false,
110
+ "desc": "按中文值 / code 模糊过滤(如品牌搜「兰」);不传=全量,编码类字段(品牌/品类标签)可上千条,建议带"
111
+ }
112
+ ],
113
+ "transport": {
114
+ "method": "POST",
115
+ "path": "/subscription/get_field_values",
116
+ "send": "args"
117
+ },
118
+ "errors": [
119
+ "auth_error",
120
+ "validation",
121
+ "api_error",
122
+ "network",
123
+ "internal"
124
+ ]
125
+ },
8
126
  {
9
127
  "action": "job-create",
10
128
  "op": "job_create",
@@ -185,7 +303,7 @@
185
303
  "type": "array"
186
304
  },
187
305
  "published": {
188
- "description": "**发布时间**口径(必填,主口径 —— 它同时决定查哪个月的索引、怎么拆分片,所以不能缺省)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。",
306
+ "description": "**发布时间**口径(必填,主口径 —— 它同时决定查哪个月的索引、怎么拆分片,所以不能缺省)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。",
189
307
  "pattern": "^(?:T-\\d+~T-\\d+|T-\\d+@(?:[01]\\d|2[0-3]):[0-5]\\d~T-\\d+@(?:[01]\\d|2[0-3]):[0-5]\\d)$",
190
308
  "title": "Published",
191
309
  "type": "string"
@@ -201,7 +319,7 @@
201
319
  }
202
320
  ],
203
321
  "default": null,
204
- "description": "**入库时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:入库时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。",
322
+ "description": "**入库时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:入库时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。",
205
323
  "title": "Idate"
206
324
  },
207
325
  "udate": {
@@ -215,7 +333,7 @@
215
333
  }
216
334
  ],
217
335
  "default": null,
218
- "description": "**更新时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:更新时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。",
336
+ "description": "**更新时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:更新时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。",
219
337
  "title": "Udate"
220
338
  },
221
339
  "frequency": {
@@ -441,21 +559,21 @@
441
559
  "field": "published",
442
560
  "type": "string",
443
561
  "required": true,
444
- "desc": "**发布时间**口径(必填,主口径 —— 它同时决定查哪个月的索引、怎么拆分片,所以不能缺省)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。"
562
+ "desc": "**发布时间**口径(必填,主口径 —— 它同时决定查哪个月的索引、怎么拆分片,所以不能缺省)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。"
445
563
  },
446
564
  {
447
565
  "flag": "--idate",
448
566
  "field": "idate",
449
567
  "type": "string",
450
568
  "required": false,
451
- "desc": "**入库时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:入库时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。"
569
+ "desc": "**入库时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:入库时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。"
452
570
  },
453
571
  {
454
572
  "flag": "--udate",
455
573
  "field": "udate",
456
574
  "type": "string",
457
575
  "required": false,
458
- "desc": "**更新时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:更新时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。"
576
+ "desc": "**更新时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:更新时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。"
459
577
  },
460
578
  {
461
579
  "flag": "--frequency",
@@ -1383,7 +1501,7 @@
1383
1501
  }
1384
1502
  ],
1385
1503
  "default": null,
1386
- "description": "**发布时间**口径(必填字段,只能改不能清)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。",
1504
+ "description": "**发布时间**口径(必填字段,只能改不能清)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。",
1387
1505
  "title": "Published"
1388
1506
  },
1389
1507
  "idate": {
@@ -1397,7 +1515,7 @@
1397
1515
  }
1398
1516
  ],
1399
1517
  "default": null,
1400
- "description": "**入库时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。",
1518
+ "description": "**入库时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。",
1401
1519
  "title": "Idate"
1402
1520
  },
1403
1521
  "udate": {
@@ -1411,7 +1529,7 @@
1411
1529
  }
1412
1530
  ],
1413
1531
  "default": null,
1414
- "description": "**更新时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。",
1532
+ "description": "**更新时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。",
1415
1533
  "title": "Udate"
1416
1534
  },
1417
1535
  "fields": {
@@ -1680,21 +1798,21 @@
1680
1798
  "field": "published",
1681
1799
  "type": "string",
1682
1800
  "required": false,
1683
- "desc": "**发布时间**口径(必填字段,只能改不能清)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。"
1801
+ "desc": "**发布时间**口径(必填字段,只能改不能清)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。"
1684
1802
  },
1685
1803
  {
1686
1804
  "flag": "--idate",
1687
1805
  "field": "idate",
1688
1806
  "type": "string",
1689
1807
  "required": false,
1690
- "desc": "**入库时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。"
1808
+ "desc": "**入库时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。"
1691
1809
  },
1692
1810
  {
1693
1811
  "flag": "--udate",
1694
1812
  "field": "udate",
1695
1813
  "type": "string",
1696
1814
  "required": false,
1697
- "desc": "**更新时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。"
1815
+ "desc": "**更新时间**口径。不传=不改;传空串 \"\"=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。"
1698
1816
  },
1699
1817
  {
1700
1818
  "flag": "--fields",
@@ -1745,6 +1863,197 @@
1745
1863
  "internal"
1746
1864
  ]
1747
1865
  },
1866
+ {
1867
+ "action": "list-fields",
1868
+ "op": "list_fields",
1869
+ "name": "subscription/list_fields",
1870
+ "summary": "列出所选站点下可导出的字段:name_en(填 fields 用)、中文名、类型、是否枚举 / code。",
1871
+ "description": "列出所选站点下可导出的字段:name_en(填 fields 用)、中文名、类型、是否枚举 / code。\n\n``is_enum`` / ``is_code`` 为真的字段,导出文件里存的是枚举码 / 编码值;\n**若**调用方要把它们换成中文,再调 ``get_field_values`` 取字典自行替换(按需,非必经步骤)。",
1872
+ "input_schema": {
1873
+ "additionalProperties": false,
1874
+ "properties": {
1875
+ "source": {
1876
+ "description": "站点数组(中文站点名,取自 list_sites),至少 1 个;返回这些站点下字段的并集",
1877
+ "items": {
1878
+ "minLength": 1,
1879
+ "type": "string"
1880
+ },
1881
+ "minItems": 1,
1882
+ "title": "Source",
1883
+ "type": "array"
1884
+ },
1885
+ "keyword": {
1886
+ "anyOf": [
1887
+ {
1888
+ "maxLength": 64,
1889
+ "type": "string"
1890
+ },
1891
+ {
1892
+ "type": "null"
1893
+ }
1894
+ ],
1895
+ "default": null,
1896
+ "description": "按字段中文名 / name_en 模糊过滤(如「情感」「互动」);不传=该站点全部字段",
1897
+ "title": "Keyword"
1898
+ }
1899
+ },
1900
+ "required": [
1901
+ "source"
1902
+ ],
1903
+ "title": "SubListFieldsInput",
1904
+ "type": "object"
1905
+ },
1906
+ "output_schema": {
1907
+ "$defs": {
1908
+ "SubField": {
1909
+ "additionalProperties": false,
1910
+ "description": "一个可导出字段(**订阅口径**:只给填 ``fields`` 与翻译列值要用的信息)。",
1911
+ "properties": {
1912
+ "name_en": {
1913
+ "description": "字段标识(ES 字段名),即 job_create / job_update 的 fields 该填的值",
1914
+ "title": "Name En",
1915
+ "type": "string"
1916
+ },
1917
+ "name": {
1918
+ "description": "字段中文名 —— 把用户说法对齐到 name_en 用",
1919
+ "title": "Name",
1920
+ "type": "string"
1921
+ },
1922
+ "data_type": {
1923
+ "description": "语义类型:keyword / text / long / double / date / boolean / object / nested",
1924
+ "title": "Data Type",
1925
+ "type": "string"
1926
+ },
1927
+ "description": {
1928
+ "default": "",
1929
+ "description": "字段描述;元数据未登记描述时为空串",
1930
+ "title": "Description",
1931
+ "type": "string"
1932
+ },
1933
+ "is_enum": {
1934
+ "description": "值来自内置枚举(如数据类型、情感):导出列存的是枚举码;如需换成中文,再按需调 get_field_values 取字典自行替换",
1935
+ "title": "Is Enum",
1936
+ "type": "boolean"
1937
+ },
1938
+ "is_code": {
1939
+ "description": "值是编码值(如品牌标签、品类标签):导出列存的是 code 而非中文;如需换成中文,再按需调 get_field_values 取字典自行替换",
1940
+ "title": "Is Code",
1941
+ "type": "boolean"
1942
+ }
1943
+ },
1944
+ "required": [
1945
+ "name_en",
1946
+ "name",
1947
+ "data_type",
1948
+ "is_enum",
1949
+ "is_code"
1950
+ ],
1951
+ "title": "SubField",
1952
+ "type": "object"
1953
+ }
1954
+ },
1955
+ "additionalProperties": false,
1956
+ "properties": {
1957
+ "items": {
1958
+ "description": "字段列表(所选站点的并集,按 name_en 排序)",
1959
+ "items": {
1960
+ "$ref": "#/$defs/SubField"
1961
+ },
1962
+ "title": "Items",
1963
+ "type": "array"
1964
+ },
1965
+ "total": {
1966
+ "description": "字段总数",
1967
+ "title": "Total",
1968
+ "type": "integer"
1969
+ }
1970
+ },
1971
+ "required": [
1972
+ "items",
1973
+ "total"
1974
+ ],
1975
+ "title": "SubFieldList",
1976
+ "type": "object"
1977
+ },
1978
+ "flags": [
1979
+ {
1980
+ "flag": "--source",
1981
+ "field": "source",
1982
+ "type": "list[str](json)",
1983
+ "required": true,
1984
+ "desc": "站点数组(中文站点名,取自 list_sites),至少 1 个;返回这些站点下字段的并集"
1985
+ },
1986
+ {
1987
+ "flag": "--keyword",
1988
+ "field": "keyword",
1989
+ "type": "string",
1990
+ "required": false,
1991
+ "desc": "按字段中文名 / name_en 模糊过滤(如「情感」「互动」);不传=该站点全部字段"
1992
+ }
1993
+ ],
1994
+ "transport": {
1995
+ "method": "POST",
1996
+ "path": "/subscription/list_fields",
1997
+ "send": "args"
1998
+ },
1999
+ "errors": [
2000
+ "auth_error",
2001
+ "validation",
2002
+ "api_error",
2003
+ "network",
2004
+ "internal"
2005
+ ]
2006
+ },
2007
+ {
2008
+ "action": "list-sites",
2009
+ "op": "list_sites",
2010
+ "name": "subscription/list_sites",
2011
+ "summary": "列出可订阅站点(中文站点名)—— job_create / job_update 的 source 只能取这里的值。",
2012
+ "description": "列出可订阅站点(中文站点名)—— job_create / job_update 的 source 只能取这里的值。",
2013
+ "input_schema": {
2014
+ "type": "object",
2015
+ "properties": {},
2016
+ "additionalProperties": false
2017
+ },
2018
+ "output_schema": {
2019
+ "additionalProperties": false,
2020
+ "description": "可订阅站点名单(全量,无需翻页:站点由运维在表里配,量级有界)。",
2021
+ "properties": {
2022
+ "items": {
2023
+ "description": "中文站点名列表,即 job_create / job_update 的 source 该填的值(按配置顺序)",
2024
+ "items": {
2025
+ "type": "string"
2026
+ },
2027
+ "title": "Items",
2028
+ "type": "array"
2029
+ },
2030
+ "total": {
2031
+ "description": "站点总数",
2032
+ "title": "Total",
2033
+ "type": "integer"
2034
+ }
2035
+ },
2036
+ "required": [
2037
+ "items",
2038
+ "total"
2039
+ ],
2040
+ "title": "SubSiteList",
2041
+ "type": "object"
2042
+ },
2043
+ "flags": [],
2044
+ "transport": {
2045
+ "method": "POST",
2046
+ "path": "/subscription/list_sites",
2047
+ "send": "args"
2048
+ },
2049
+ "errors": [
2050
+ "auth_error",
2051
+ "validation",
2052
+ "api_error",
2053
+ "network",
2054
+ "internal"
2055
+ ]
2056
+ },
1748
2057
  {
1749
2058
  "action": "task-list",
1750
2059
  "op": "task_list",
@@ -2023,13 +2332,16 @@
2023
2332
  ],
2024
2333
  "skill": {
2025
2334
  "slug": "social-neuron-subscription",
2026
- "description": "使用场景:定时导出/订阅推送/定期拉数/大批量出文件——需异步产出文件并下载时用能力:按魔方规则、定时 cron 或手动触发,把大库数据异步导出为文件,上传 octo/sftp,产出下载 url 供调用方轮询拉取;可创建/修改/列出/删除/触发订阅 job、翻页查询 task。概念:job=订阅定义(数据范围+频率+投递方式,系统按频率生成 cron);task=job 的一次执行,产物与下载地址落在 file_info。边界:①每 token 生效 job 默认≤10;②单次拉数可指定 size,默认且最大 50 万行,超出截断;③投递仅 octo/sftp(kafka 规划中,暂不支持),无主动通知、须轮询 task 取结果。④如果拉取不到数据则不会产生文件上传,也就没有文件url信息",
2335
+ "description": "使用场景:定时导出/订阅推送/定期拉数/大批量出文件——需异步产出文件并下载时用能力:按魔方规则、定时 cron 或手动触发,把大库数据异步导出为文件,上传 octo/sftp,产出下载 url 供调用方轮询拉取;可创建/修改/列出/删除/触发订阅 job、翻页查询 task;另有三个只读发现接口:list_sites / list_fields 用于建 job 前对齐站点与字段取值;get_field_values 给出枚举值 / 编码值的中文字典,仅在用户明确要求把导出的码值换成中文时按需取用(换值由调用方拿到数据后自行完成,系统不自动回显)。概念:job=订阅定义(数据范围+频率+投递方式,系统按频率生成 cron);task=job 的一次执行,产物与下载地址落在 file_info。边界:①每 token 生效 job 默认≤10;②单次拉数可指定 size,默认且最大 50 万行,超出截断;③投递仅 octo/sftp(kafka 规划中,暂不支持),无主动通知、须轮询 task 取结果。④如果拉取不到数据则不会产生文件上传,也就没有文件url信息",
2027
2336
  "actions": [
2337
+ "get-field-values",
2028
2338
  "job-create",
2029
2339
  "job-delete",
2030
2340
  "job-list",
2031
2341
  "job-trigger",
2032
2342
  "job-update",
2343
+ "list-fields",
2344
+ "list-sites",
2033
2345
  "task-list"
2034
2346
  ]
2035
2347
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-data/social-neuron-subscription",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Social Neuron subscription 能力 CLI —— 一能力一命令(social-neuron-subscription),薄客户端直达 /subscription/{op}。",
5
5
  "bin": {
6
6
  "social-neuron-subscription": "bin/cli.js"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: social-neuron-subscription
3
- description: "使用场景:定时导出/订阅推送/定期拉数/大批量出文件——需异步产出文件并下载时用能力:按魔方规则、定时 cron 或手动触发,把大库数据异步导出为文件,上传 octo/sftp,产出下载 url 供调用方轮询拉取;可创建/修改/列出/删除/触发订阅 job、翻页查询 task。概念:job=订阅定义(数据范围+频率+投递方式,系统按频率生成 cron);task=job 的一次执行,产物与下载地址落在 file_info。边界:①每 token 生效 job 默认≤10;②单次拉数可指定 size,默认且最大 50 万行,超出截断;③投递仅 octo/sftp(kafka 规划中,暂不支持),无主动通知、须轮询 task 取结果。④如果拉取不到数据则不会产生文件上传,也就没有文件url信息"
3
+ description: "使用场景:定时导出/订阅推送/定期拉数/大批量出文件——需异步产出文件并下载时用能力:按魔方规则、定时 cron 或手动触发,把大库数据异步导出为文件,上传 octo/sftp,产出下载 url 供调用方轮询拉取;可创建/修改/列出/删除/触发订阅 job、翻页查询 task;另有三个只读发现接口:list_sites / list_fields 用于建 job 前对齐站点与字段取值;get_field_values 给出枚举值 / 编码值的中文字典,仅在用户明确要求把导出的码值换成中文时按需取用(换值由调用方拿到数据后自行完成,系统不自动回显)。概念:job=订阅定义(数据范围+频率+投递方式,系统按频率生成 cron);task=job 的一次执行,产物与下载地址落在 file_info。边界:①每 token 生效 job 默认≤10;②单次拉数可指定 size,默认且最大 50 万行,超出截断;③投递仅 octo/sftp(kafka 规划中,暂不支持),无主动通知、须轮询 task 取结果。④如果拉取不到数据则不会产生文件上传,也就没有文件url信息"
4
4
  metadata:
5
5
  openclaw:
6
6
  requires: { bins: ['social-neuron-subscription'], skills: [] }
@@ -20,8 +20,16 @@ metadata:
20
20
 
21
21
  ### 一、写法约定
22
22
 
23
- 数组和对象一律写成 **JSON 串**,和 MCP 入参同形:`--rule-ids '["r1","r2"]'`、`--target '{...}'`。
24
- 数组不能用逗号分隔,**单个取值也要写成数组**。写错会直接报 `BAD_JSON` 并回显原值。
23
+ **看 flag 的类型决定怎么写**,参数表里每个 flag 都标了类型:
24
+
25
+ | flag 类型 | 怎么写 | 例子 |
26
+ |---|---|---|
27
+ | `list[...]` / 对象 | **JSON 串**(和 MCP 入参同形),**单个取值也要写成数组** | `--source '["小红书"]'`、`--rule-ids '["r1","r2"]'`、`--target '{...}'` |
28
+ | `string` / `integer` | **直接写值**,不要加方括号 | `--field kw_docType`、`--keyword 品牌`、`--name 每日舆情`、`--size 1000` |
29
+
30
+ 数组不能用逗号分隔。JSON 写坏报 `BAD_JSON` 并回显原值;给标量 flag 套上方括号(如
31
+ `--field '["kw_docType"]'`)不会报格式错 —— 它会被**原样当成字段名**去查,最后报"没有这个字段",
32
+ 所以这类错看起来会很迷惑,写的时候对一下参数表的类型列。
25
33
 
26
34
  ### 二、两个概念
27
35
 
@@ -33,15 +41,30 @@ metadata:
33
41
  ### 三、标准流程
34
42
 
35
43
  ```
36
- job-create → 拿到 job_id
37
- job-trigger → 立刻跑一次(不等 cron);返回 task_id
38
- task-list → 轮询该 task,status 变终态后读 file_info 里的下载 url
44
+ list-sites / list-fields → 先对齐 --source 与 --fields 的合法取值(见四)
45
+ job-create → 拿到 job_id
46
+ job-trigger → 立刻跑一次(不等 cron);返回 task_id
47
+ task-list → 轮询该 task,status 变终态后读 file_info 里的下载 url
39
48
  ```
40
49
 
50
+ 到这里订阅就做完了。**码值换中文不在这条流程里** —— 只有用户明确要求时才做,见六。
51
+
41
52
  改配置用 `job-update`(只传要改的字段);不想再跑就 `job-update --active false`,
42
53
  彻底不要才 `job-delete`。
43
54
 
44
- ### 四、三个时间口径别搞混
55
+ ### 四、建 job 前先对齐取值(站点 / 字段)
56
+
57
+ `--source` 和 `--fields` 不能凭感觉写,两个发现接口给的就是合法取值:
58
+
59
+ | 命令 | 给什么 | 怎么用 |
60
+ |---|---|---|
61
+ | `list-sites` | 可订阅站点(**中文站点名**,如「抖音」「微博」) | 原样填 `--source` |
62
+ | `list-fields --source '["抖音"]'` | 该站点下可导出的字段 | `name_en` 填 `--fields`;`name` 是中文名,用来把用户说法对齐到 `name_en` |
63
+
64
+ `--source` 填的是**中文站点名**,不是域名 —— `douyin.com` 这类是大库内部的过滤值,填进去会被拒。
65
+ 字段近千,按需用 `list-fields --keyword 情感` 收窄。
66
+
67
+ ### 五、三个时间口径别搞混
45
68
 
46
69
  - `--published` **发布时间,必填**:它同时决定查哪个月的索引,所以不能缺省。
47
70
  - `--idate` 入库时间、`--udate` 更新时间:**选填**,是在发布时间窗**之内**再 AND 一层收窄;
@@ -49,12 +72,52 @@ task-list → 轮询该 task,status 变终态后读 file_info 里的下载 ur
49
72
  - 相对时间支持按天 `T-M~T-N` 和按分钟 `T-M@HH:mm~T-N@HH:mm`,均包含首尾;
50
73
  如 `T-1@07:00~T-0@06:59` 表示昨天 07:00:00 至今天 06:59:59。
51
74
 
52
- ### 五、容易踩的
75
+ ### 六、(可选)用户明确要求把码值换成中文时
76
+
77
+ **默认不做翻译**:导出文件按大库原值交付,`get-field-values` **不是标准流程的一步**,
78
+ 不要为了"看起来完整"主动去翻。只有用户明确提出这个要求(如「品牌码换成品牌名」
79
+ 「文件里要中文」)时才做下面这件事 —— 而且这是**你拿到数据之后自己的加工**:
80
+ 订阅能力不自动回显,也不接受"把文件给我翻一遍"。
81
+
82
+ `list-fields` 出参里 `is_enum` / `is_code` 为真的字段,导出列存的可能是码:
83
+
84
+ | 标记 | 值来自 | 举例 |
85
+ |---|---|---|
86
+ | `is_enum: true` | 内置枚举 | `kw_docType`(数据类型):`1`=帖子、`2`=原创帖、`5`=评论 |
87
+ | `is_code: true` | 编码字段(品牌、品类标签…) | `kw_tag_brand`(品牌标签):`V200500020023`=苏格兰百富 |
88
+ | 两者都 false | 明文字段 | 原值,不用翻 |
89
+
90
+ 做法:对这些字段调 `get-field-values` 拿**全量字典** `[{code, value}]`,按 `code` 把导出列的值
91
+ 换成 `value`,字典拉一次就能换整列。
92
+
93
+ **先看字典再决定要不要换**:有些枚举字段的 `code` 与 `value` 本就相同(如 `kw_commonSentimentV2`
94
+ 通用情感V2标签,字典是 `负面/负面`、`正面/正面`),导出的已是中文、无需转换;两者不同的才要换。
95
+
96
+ ```bash
97
+ social-neuron-subscription get-field-values --field kw_docType
98
+ # → items: [{"code":"1","value":"帖子"}, {"code":"2","value":"原创帖"}, {"code":"5","value":"评论"}, ...]
99
+ # 导出文件里 kw_docType=1 的行 → 帖子
100
+ ```
101
+
102
+ 编码类字段取值上千(品牌标签约 7700 条),务必带 `--keyword` 收窄:
103
+
104
+ ```bash
105
+ social-neuron-subscription get-field-values --field kw_tag_brand --keyword 兰
106
+ # → 命中约百条,如 [{"code":"V200500020023","value":"苏格兰百富"}, ...]
107
+ ```
108
+
109
+ **返回空列表**说明该字段没有值字典(明文字段,或元数据侧还没配值来源)—— 空不等于出错,
110
+ 别把 code 当中文直接发出去。
111
+
112
+ > 以上示例值实查自元数据(2026-10-12);字典由元数据侧维护、会变 —— **以 `get-field-values`
113
+ > 现查为准**,不要把这里的示例当权威映射。
114
+
115
+ ### 七、容易踩的
53
116
 
54
117
  - **拉不到数据就不会有文件**,`file_info` 里也就没有 url —— 这不是失败,是没命中。
55
118
  - 单次导出 `--size` 默认且最大 **50 万行**,超出会截断。
56
119
  - 每个 token 生效的 job 默认 **≤10 个**,满了要先 `job-delete` 或停用。
57
- - `--source` 只能填**已配置的站点**,不是随便写域名。
120
+ - `--source` 只能填**已配置站点的中文名**(用 `list-sites` 查);写 `douyin.com` 这类域名会被拒。
58
121
  - 投递目标本期只支持 **octo / sftp**(kafka 规划中);省略 `--target` 默认 octo。
59
122
 
60
123
  ## 示例
@@ -62,16 +125,22 @@ task-list → 轮询该 task,status 变终态后读 file_info 里的下载 ur
62
125
  ### 建一个每天跑的订阅,并立刻先跑一次看看
63
126
 
64
127
  ```bash
65
- # 1) 建 job(频率用自然语言,系统转 cron)
128
+ # 1) 先看有哪些站点可订阅(--source 填的是中文站点名)
129
+ social-neuron-subscription list-sites
130
+
131
+ # 2) 再看该站点有哪些字段可导出(name_en 填 --fields)
132
+ social-neuron-subscription list-fields --source '["抖音"]' --keyword 情感
133
+
134
+ # 3) 建 job(频率用自然语言,系统转 cron)
66
135
  social-neuron-subscription job-create --name 每日舆情 \
67
- --rule-ids '["12345"]' --source '["douyin.com"]' \
136
+ --rule-ids '["12345"]' --source '["抖音"]' \
68
137
  --published 'T-7~T-1' --frequency '每天早上8点' -y
69
138
 
70
- # 2) 不等 cron,手动触发一次
139
+ # 4) 不等 cron,手动触发一次
71
140
  social-neuron-subscription job-trigger --job-id 1001 -y
72
141
  ```
73
142
 
74
- > 写操作要加 -y。job-trigger 返回 task_id,拿它去轮询。
143
+ > 站点与字段先查后填,别凭感觉写。写操作要加 -y;job-trigger 返回 task_id,拿它去轮询。
75
144
 
76
145
  ### 轮询拿下载地址
77
146
 
@@ -81,6 +150,23 @@ social-neuron-subscription task-list --job-id 1001 --page 1 --page-size 10
81
150
 
82
151
  > status 到终态后读 file_info 里的 url;没命中数据时不会有文件,这不是失败。
83
152
 
153
+ ### (用户要求中文时)把导出文件里的码值换成中文
154
+
155
+ ```bash
156
+ # 0) 前提:用户明确要求要中文。否则按原值交付,不做这一步
157
+ # 1) 先看哪些字段的值是码(看 is_enum / is_code)
158
+ social-neuron-subscription list-fields --source '["抖音"]' --keyword 品牌
159
+ # → {"name_en":"kw_tag_brand","name":"品牌标签","data_type":"keyword","is_code":true}
160
+
161
+ # 2) 取该字段的值字典(品牌标签约 7700 条,带 keyword 收窄)
162
+ social-neuron-subscription get-field-values --field kw_tag_brand --keyword 兰
163
+ # → items: [{"code":"V200500020023","value":"苏格兰百富"}, ...]
164
+
165
+ # 3) 按 code 把导出文件里这一列换成 value(翻译在调用方做)
166
+ ```
167
+
168
+ > 仅在用户要求时做,且由你在拿到数据后自己换 —— 系统不自动回显。is_enum / is_code 为真也不等于要换:先看字典,code 与 value 相同(如情感标签)就无需转换。
169
+
84
170
  ### 临时停用一个订阅(保留定义)
85
171
 
86
172
  ```bash
@@ -91,6 +177,45 @@ social-neuron-subscription job-update --job-id 1001 --active false -y
91
177
 
92
178
  ## 命令
93
179
 
180
+ ### social-neuron-subscription get-field-values
181
+ 取字段值字典 [{code, value}];**仅在需要把导出的码值换成中文时按需取用**。
182
+
183
+ 枚举字段与编码字段统一走这里(值从哪来是元数据内部的事,对外只有"有没有字典"之分)。
184
+
185
+ 换值**不是订阅的标准步骤**:导出文件默认按大库原值交付,只有调用方(或其用户)明确要求
186
+ 中文时才用这份字典自行替换 —— 系统不做出参自动回显,也不读产出的文件。
187
+
188
+ **空列表原样返回**:不在出参里猜原因 —— "该字段真是明文(本就无字典)"与"元数据侧没配值来源"
189
+ 在出参上无法区分,猜错反而误导(说成"直接当原值用"会让调用方把一列 code 当中文发出去)。
190
+
191
+ **入参**
192
+
193
+ | flag | 字段 | 类型 | 必填 | 约束 | 说明 |
194
+ |---|---|---|---|---|---|
195
+ | --field | field | string | 是 | - | 字段 name_en(取自 list_fields);仅 is_enum / is_code 为真的字段有值字典(按需取用:只有要把导出的码值换成中文时才需要) |
196
+ | --keyword | keyword | string | 否 | maxLen=64 | 按中文值 / code 模糊过滤(如品牌搜「兰」);不传=全量,编码类字段(品牌/品类标签)可上千条,建议带 |
197
+
198
+ **出参 `SubFieldValueList`**
199
+
200
+ | 字段 | 类型 | 必填 | 约束 | 说明 |
201
+ |---|---|---|---|---|
202
+ | field | string | 是 | - | 字段 name_en(回显入参) |
203
+ | items | list[SubFieldValue] | 是 | - | 值字典 [{code, value}]:code 是导出列里存的值,value 是对应中文;明文字段无字典,返回空列表 |
204
+ | total | integer | 是 | - | 值总数 |
205
+
206
+ **对象 `SubFieldValue`** —— 值字典的一项。
207
+
208
+ 刻意**不复用** ``commons.metadata.schemas.values.FieldValue``:那是元数据面的内部契约,
209
+ 字段说明里带着上游系统的字段名(``tagCode`` / ``tagName`` 之类),对外没有意义也不该暴露。
210
+ 这里只说调用方需要知道的两件事:导出列里存的是什么、对应的中文是什么。
211
+
212
+ | 键 | 类型 | 必填 | 约束 | 说明 |
213
+ |---|---|---|---|---|
214
+ | code | string | 是 | - | 编码值 —— 导出列里实际存的那个值(如 1、V200500020023) |
215
+ | value | string | 是 | - | 该编码值对应的中文 |
216
+
217
+ 示例:social-neuron-subscription get-field-values --field <v>
218
+
94
219
  ### social-neuron-subscription job-create
95
220
  创建订阅 job:数据范围 + 频率 + 投递 target(默认 octo);系统生成 job_id/cron。
96
221
 
@@ -101,9 +226,9 @@ social-neuron-subscription job-update --job-id 1001 --active false -y
101
226
  | --name | name | string | 是 | minLen=1, maxLen=128 | job 名称,同一凭证(token)下唯一 |
102
227
  | --rule-ids | rule_ids | list[string] | 是 | minItems=1, minLen=1 | 魔方规则ID数组,至少 1 个 |
103
228
  | --source | source | list[string] | 是 | minItems=1, minLen=1 | 站点数组,至少 1 个;只能取已配置站点 |
104
- | --published | published | string | 是 | - | **发布时间**口径(必填,主口径 —— 它同时决定查哪个月的索引、怎么拆分片,所以不能缺省)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。 |
105
- | --idate | idate | string | 否 | - | **入库时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:入库时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。 |
106
- | --udate | udate | string | 否 | - | **更新时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:更新时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。 |
229
+ | --published | published | string | 是 | - | **发布时间**口径(必填,主口径 —— 它同时决定查哪个月的索引、怎么拆分片,所以不能缺省)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。 |
230
+ | --idate | idate | string | 否 | - | **入库时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:入库时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。 |
231
+ | --udate | udate | string | 否 | - | **更新时间**口径(选填,不传=该维度不过滤)。在发布时间窗**之内**再 AND 一层:更新时间落在本区间的数据。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。 |
107
232
  | --frequency | frequency | string | 是 | minLen=1, maxLen=64 | 自然语言同步频率,系统转 cron(东八区)。可指定具体时间、并**支持一天多次**:如「每天9点」「每天9点和15点」(一天跑两次)「每周一9点」「每小时」「每30分钟」。无法解析为 cron 会被拒绝。 |
108
233
  | --fields | fields | list[string] | 否 | minLen=1 | 拉取/导出字段;不填拉全量 |
109
234
  | --size | size | integer | 否 | min=1, max=500000 | 每次执行最多导出的记录行数,默认且最大为 500000 |
@@ -293,9 +418,9 @@ social-neuron-subscription job-update --job-id 1001 --active false -y
293
418
  | --name | name | string | 否 | minLen=1, maxLen=128 | 新名称(同一凭证下唯一) |
294
419
  | --rule-ids | rule_ids | list[string] | 否 | minItems=1, minLen=1 | 整组全量覆盖 |
295
420
  | --source | source | list[string] | 否 | minItems=1, minLen=1 | 整组全量覆盖 |
296
- | --published | published | string | 否 | - | **发布时间**口径(必填字段,只能改不能清)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。 |
297
- | --idate | idate | string | 否 | - | **入库时间**口径。不传=不改;传空串 ""=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。 |
298
- | --udate | udate | string | 否 | - | **更新时间**口径。不传=不改;传空串 ""=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 120 天、偏移最多 720 天,超限直接报错(不会静默回落)。 |
421
+ | --published | published | string | 否 | - | **发布时间**口径(必填字段,只能改不能清)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。 |
422
+ | --idate | idate | string | 否 | - | **入库时间**口径。不传=不改;传空串 ""=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。 |
423
+ | --udate | udate | string | 否 | - | **更新时间**口径。不传=不改;传空串 ""=**清除**该维度(恢复成不过滤)。支持两种相对时间口径:**按天 T-M~T-N** 与**按分钟 T-M@HH:mm~T-N@HH:mm**。M/N 是相对基准日的天数偏移,HH:mm 使用 24 小时制(00:00–23:59);基准时间取本次触发的 cron 槽位时间(东八区),手动触发取触发时间。**两个端点都必须写全且精度必须一致**:不接受 T-1 单值简写,也不允许T-1@07:00~T-0 这类按天、按分钟混用。所有口径均为左闭右闭区间 [start,end],即起止端点都包含。按天格式包含首尾自然日,查询时起始日补 00:00:00、结束日补 23:59:59。例如:T-0~T-0=今天;T-1~T-1=昨天;T-2~T-1=前天到昨天;T-7~T-1=近7天到昨天。按分钟格式包含首尾分钟,查询时起始分钟补 :00、结束分钟补 :59。例如:T-1@07:00~T-0@06:59=昨天07:00:00至今天06:59:59,完整覆盖昨天7点到今天6点时段;T-0@09:30~T-0@10:45=今天09:30:00至10:45:59。起点不得晚于终点;跨度最多 731 天(两年)、偏移最多 915 天(30个月),超限直接报错(不会静默回落)。 |
299
424
  | --fields | fields | list[string] | 否 | minLen=1 | 整组全量覆盖 |
300
425
  | --size | size | integer | 否 | min=1, max=500000 | 每次执行最多导出的记录行数;不传则不修改,最大 500000 |
301
426
  | --frequency | frequency | string | 否 | minLen=1, maxLen=64 | 传入则按新频率重算 cron(用法同创建;支持一天多次,如「每天9点和15点」);无法解析为 cron 会被拒绝 |
@@ -356,6 +481,56 @@ social-neuron-subscription job-update --job-id 1001 --active false -y
356
481
 
357
482
  示例:social-neuron-subscription job-update --job-id <v>
358
483
 
484
+ ### social-neuron-subscription list-fields
485
+ 列出所选站点下可导出的字段:name_en(填 fields 用)、中文名、类型、是否枚举 / code。
486
+
487
+ ``is_enum`` / ``is_code`` 为真的字段,导出文件里存的是枚举码 / 编码值;
488
+ **若**调用方要把它们换成中文,再调 ``get_field_values`` 取字典自行替换(按需,非必经步骤)。
489
+
490
+ **入参**
491
+
492
+ | flag | 字段 | 类型 | 必填 | 约束 | 说明 |
493
+ |---|---|---|---|---|---|
494
+ | --source | source | list[string] | 是 | minItems=1, minLen=1 | 站点数组(中文站点名,取自 list_sites),至少 1 个;返回这些站点下字段的并集 |
495
+ | --keyword | keyword | string | 否 | maxLen=64 | 按字段中文名 / name_en 模糊过滤(如「情感」「互动」);不传=该站点全部字段 |
496
+
497
+ **出参 `SubFieldList`**
498
+
499
+ | 字段 | 类型 | 必填 | 约束 | 说明 |
500
+ |---|---|---|---|---|
501
+ | items | list[SubField] | 是 | - | 字段列表(所选站点的并集,按 name_en 排序) |
502
+ | total | integer | 是 | - | 字段总数 |
503
+
504
+ **对象 `SubField`** —— 一个可导出字段(**订阅口径**:只给填 ``fields`` 与翻译列值要用的信息)。
505
+
506
+ | 键 | 类型 | 必填 | 约束 | 说明 |
507
+ |---|---|---|---|---|
508
+ | name_en | string | 是 | - | 字段标识(ES 字段名),即 job_create / job_update 的 fields 该填的值 |
509
+ | name | string | 是 | - | 字段中文名 —— 把用户说法对齐到 name_en 用 |
510
+ | data_type | string | 是 | - | 语义类型:keyword / text / long / double / date / boolean / object / nested |
511
+ | description | string | 否 | - | 字段描述;元数据未登记描述时为空串 |
512
+ | is_enum | boolean | 是 | - | 值来自内置枚举(如数据类型、情感):导出列存的是枚举码;如需换成中文,再按需调 get_field_values 取字典自行替换 |
513
+ | is_code | boolean | 是 | - | 值是编码值(如品牌标签、品类标签):导出列存的是 code 而非中文;如需换成中文,再按需调 get_field_values 取字典自行替换 |
514
+
515
+ 示例:social-neuron-subscription list-fields --source '["a","b"]'
516
+
517
+ ### social-neuron-subscription list-sites
518
+ 列出可订阅站点(中文站点名)—— job_create / job_update 的 source 只能取这里的值。
519
+
520
+ **入参**
521
+
522
+ | flag | 字段 | 类型 | 必填 | 约束 | 说明 |
523
+ |---|---|---|---|---|---|
524
+
525
+ **出参 `SubSiteList`**
526
+
527
+ | 字段 | 类型 | 必填 | 约束 | 说明 |
528
+ |---|---|---|---|---|
529
+ | items | list[string] | 是 | - | 中文站点名列表,即 job_create / job_update 的 source 该填的值(按配置顺序) |
530
+ | total | integer | 是 | - | 站点总数 |
531
+
532
+ 示例:social-neuron-subscription list-sites
533
+
359
534
  ### social-neuron-subscription task-list
360
535
  列出某本人 job 的执行 task(翻页),可按 task_id 查单条、status/创建时间过滤,按创建时间排序。
361
536