feat: 视频采集等待支持最长 3600 秒 (#39)
This commit is contained in:
+1
-1
@@ -71,7 +71,7 @@ download:
|
||||
# 仅控制视频 CDN 文件下载;淘宝页面访问保持串行。
|
||||
concurrency: 2
|
||||
|
||||
# 商品和候选详情访问间的等待区间;降低请求量,不保证解除风控。
|
||||
# 商品和候选详情访问间的等待区间(0—3600 秒);降低请求量,不保证解除风控。
|
||||
# 默认 10—20 秒是降低负载的起点,不是平台公布的安全阈值。
|
||||
wait_seconds_min: 10
|
||||
wait_seconds_max: 20
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Business-Rules-and-Glossary
|
||||
wiki_url: https://git.ilapage.cn/chengma/cmsp/wiki/Business-Rules-and-Glossary.-
|
||||
wiki_revision: 3f8176505ad472eb9c7899fb032a41b1b5fa28b4
|
||||
synchronized_at: 2026-10-07T08:26:24Z
|
||||
wiki_revision: fdb09a1e0c414d6e4463ae31aa34b7b4970a06d3
|
||||
synchronized_at: 2026-10-07T08:51:30Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 业务规则与术语
|
||||
@@ -122,7 +122,7 @@ MTOP 搜索方式、签名与请求参数保持现状。商品原链接以实际
|
||||
12. 每个商品下载的视频数量有上限,可在参数设置中调整。
|
||||
13. 下载先写入临时文件,经 `ffprobe` 校验通过后才改名为正式文件;校验失败视为下载失败。
|
||||
14. 已存在且非空的目标文件视为已完成,跳过重复下载。
|
||||
15. 商品及新候选详情之间插入可取消等待,等待区间可配置,用于降低访问负载。
|
||||
15. 商品及新候选详情之间插入可取消等待,最短和最长等待均可配置为 0—3600 秒,最长不得小于最短;两者相同时使用固定间隔。此等待用于降低访问负载,不保证解除平台限制。
|
||||
|
||||
### 货憨憨
|
||||
|
||||
|
||||
@@ -314,10 +314,10 @@ onUnmounted(() => {
|
||||
</n-form-item>
|
||||
</div>
|
||||
<div class="two">
|
||||
<n-form-item label="商品及候选间等待秒数">
|
||||
<n-input-number v-model:value="cfg.download.waitSecondsMin" :min="0" style="width: 90px" />
|
||||
<n-form-item label="商品及候选间等待秒数(0—3600)">
|
||||
<n-input-number v-model:value="cfg.download.waitSecondsMin" :min="0" :max="3600" style="width: 90px" />
|
||||
<span class="dash">—</span>
|
||||
<n-input-number v-model:value="cfg.download.waitSecondsMax" :min="0" style="width: 90px" />
|
||||
<n-input-number v-model:value="cfg.download.waitSecondsMax" :min="0" :max="3600" style="width: 90px" />
|
||||
</n-form-item>
|
||||
</div>
|
||||
</n-form>
|
||||
|
||||
@@ -219,11 +219,11 @@ func (c Config) Validate() error {
|
||||
if err := checkIntRange(d.Concurrency, 1, 8, "下载并发数"); err != nil {
|
||||
return err
|
||||
}
|
||||
if d.WaitSecondsMin < 0 || d.WaitSecondsMin > 60 {
|
||||
return fmt.Errorf("商品间最短等待秒数不合法,允许范围 0—60")
|
||||
if d.WaitSecondsMin < 0 || d.WaitSecondsMin > 3600 {
|
||||
return fmt.Errorf("商品间最短等待秒数不合法,允许范围 0—3600")
|
||||
}
|
||||
if d.WaitSecondsMax < 0 || d.WaitSecondsMax > 120 {
|
||||
return fmt.Errorf("商品间最长等待秒数不合法,允许范围 0—120")
|
||||
if d.WaitSecondsMax < 0 || d.WaitSecondsMax > 3600 {
|
||||
return fmt.Errorf("商品间最长等待秒数不合法,允许范围 0—3600")
|
||||
}
|
||||
if d.WaitSecondsMax < d.WaitSecondsMin {
|
||||
return fmt.Errorf("商品间最长等待秒数不能小于最短等待秒数")
|
||||
@@ -386,7 +386,7 @@ download:
|
||||
# 仅控制视频 CDN 文件下载;淘宝页面访问保持串行。
|
||||
concurrency: %d
|
||||
|
||||
# 商品和候选详情访问间的等待区间;降低请求量,不保证解除风控。
|
||||
# 商品和候选详情访问间的等待区间(0—3600 秒);降低请求量,不保证解除风控。
|
||||
# 默认 10—20 秒是降低负载的起点,不是平台公布的安全阈值。
|
||||
wait_seconds_min: %s
|
||||
wait_seconds_max: %s
|
||||
|
||||
@@ -119,6 +119,35 @@ func TestValidateRejectsBadValues(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func Test商品间等待允许一小时并拒绝超限(t *testing.T) {
|
||||
cfg := Default()
|
||||
cfg.Download.WaitSecondsMin = 3600
|
||||
cfg.Download.WaitSecondsMax = 3600
|
||||
if err := cfg.Validate(); err != nil {
|
||||
t.Fatalf("固定等待 3600 秒应当有效:%v", err)
|
||||
}
|
||||
path := filepath.Join(t.TempDir(), "config.yaml")
|
||||
if err := Save(path, cfg); err != nil {
|
||||
t.Fatalf("保存固定等待 3600 秒失败:%v", err)
|
||||
}
|
||||
loaded, err := Load(path)
|
||||
if err != nil || loaded.Download.WaitSecondsMin != 3600 || loaded.Download.WaitSecondsMax != 3600 {
|
||||
t.Fatalf("固定等待 3600 秒未正确读回:min=%v max=%v err=%v", loaded.Download.WaitSecondsMin, loaded.Download.WaitSecondsMax, err)
|
||||
}
|
||||
for _, field := range []string{"min", "max"} {
|
||||
invalid := cfg
|
||||
if field == "min" {
|
||||
invalid.Download.WaitSecondsMin = 3601
|
||||
invalid.Download.WaitSecondsMax = 3601
|
||||
} else {
|
||||
invalid.Download.WaitSecondsMax = 3601
|
||||
}
|
||||
if err := invalid.Validate(); err == nil {
|
||||
t.Fatalf("%s 超过 3600 秒应被拒绝", field)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLegacyHuohanhanFieldsDoNotBlockERPGo(t *testing.T) {
|
||||
cfg := Default()
|
||||
cfg.Huohanhan.BaseURL = ""
|
||||
|
||||
Reference in New Issue
Block a user