Skip to content

Commit 130e988

Browse files
authored
fix(iqiyi): 优化分季URL请求数,分集异常时自动重试 (huangxd-#405)
* fix(iqiyi): 分季URL按目标季过滤、跨调用及并发去重并统一标签为小写 旧版 album_episodes 分支对每个分季组的 videos URL 无差别地发起请求并合并到同一结果,产生三类问题: 1. 指定季时仍拉取并合并所有无关季分集(无季过滤); 2. 同一分季在同一次乃至跨多次 getEpisodes 调用中被重复请求(无去重); 3. 跨多次调用并发场景下,多个调用在缓存写入前同时发起同一分季请求(缓存击穿)。 修复方式: - getEpisodes 新增 querySeason 与 seasonAlbumCache 参数; - handleAnimes 透传解析出的目标季,并为整个搜索批次创建共享的 album_id 缓存; - album_episodes 分支按 group.tab_name 用 getExplicitSeasonNumber 解析季号,指定季时跳过非目标季组; - 以 album_id 为键缓存分季请求本身(而非仅结果):首次请求时立即记录 Promise,并发或后续调用复用同一请求,确保同一分季在一次搜索内最多请求一次; - 日志标签 [iQiyi] 全量改为小写 [iqiyi],与其他源规范保持一致; - video_list 内联分支不受影响,未指定季时行为与之前一致(仅减少冗余请求)。 测试 iqiyi.season.test.mjs 覆盖季过滤、单次/跨次/并发去重、内联分支等场景,共 8 例全过。 * fix(iqiyi): getEpisodes 的 base_info 请求失败时限时重试两次 问题:base_info 接口偶发返回空响应或结构残缺(status_code 为 0 但缺失 data.template,典型网络抖动)。原逻辑在 data.status_code !== 0 || !data.data || !data.data.template 时直接 return [],而 handleAnimes 仅在分集非空时才收录该 结果,导致一次瞬断会令整个季被静默丢弃,需重跑才能恢复(见老友记4.txt: 一次运行缺第七季,重跑即正常)。 修复:参照本文件搜索接口已有的「延迟重试两次」先例,将 base_info 的 httpGet 与解析封装为 fetchEpisodeData,对空响应、JSON 解析失败、status_code 非 0 或 结构残缺的情况最多重试两次(每次间隔 3 秒);耗尽仍未拿到合法响应才 return []。 首请求即成功时循环条件不满足,行为与之前完全一致。 * 优化(iqiyi): 全季搜索跳过已被内联覆盖的季的分季URL请求 全季搜索(不指定季)时,handleAnimes 先统一拉取各结果的 base_info,收集 album_episodes 中以内联 feature_paged 形式存在的季 entity_id 集合(inlinedAlbumIds)并缓存复用,避免重复请求 base_info;处理各结果时,若某分季组是 URL 桩且其 entity_id 已在内联集合中,跳过其 selector 请求。指定季时预拉取阶段不执行,桩季照常请求以保证指定季一定返回。覆盖判定以季 entity_id 为键,不会误吞衍生内容或错删无关命中数据。
1 parent 436dd63 commit 130e988

1 file changed

Lines changed: 202 additions & 107 deletions

File tree

0 commit comments

Comments
 (0)