修复追番页获取不全的问题 - #1396
Conversation
修复追番页获取不全的问题 mirai-mamori#1386
增加安全锁,放置调用次数过多;修正注释错误
There was a problem hiding this comment.
Pull request overview
This PR updates the Bangumi collection fetch logic to retrieve paginated anime collection data from the Bangumi API, addressing incomplete display when a user has more than one page of tracked anime.
Changes:
- Adds
subject_type,limit, andoffsetquery parameters for Bangumi API requests. - Fetches additional pages based on the API
totalvalue and merges results. - Caches the merged Bangumi API response shape after fetching.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
f58dec3 to
04f78f3
Compare
|
这个功能有个讨论点来着,修复的是追番模板获取不全的的问题。那么现在要获取全就牵扯到获取多少个内容。 我加了个安全锁是,如果这个人追番特别多(超过10页)就只获取前10页不然网页卡爆了,但是copilot自动review就不管这事😰 所以是即使可能会卡爆但依然获取全部,还是为保安全只获取前十页(大概是500条)呢,我倾向于后者。 |
|
似乎发现了一些可以改进的地方。 关于 API 参数:实测 关于同步拉取:最多 10 次串行请求,缓存过期的时候用户得等全部拉完才能看到页面,最坏情况可能需要十几秒。主题里 Bilibili 收藏夹的做法是用 几个小问题:
想法:如果没有问题的话,WP-Cron 后台预取的改动比较大,我可以单独提一个 PR 来做,对标
if ($collData === null) {
$dataList = [];
$offset = 0;
$pageLimit = 50;
$maxPages = 10;
$total = 0;
do {
$url = $this->collectionApi
. '?subject_type=2&limit=' . $pageLimit
. '&offset=' . $offset;
$response = $this->http_get_contents($url);
$pageData = json_decode($response, true);
if (!isset($pageData['data']) || !is_array($pageData['data'])) {
error_log('BangumiAPI: fetchCollections failed at offset=' . $offset);
break;
}
$dataList = array_merge($dataList, $pageData['data']);
$total = $pageData['total'] ?? count($dataList);
$offset += $pageLimit;
if (count($dataList) >= $total || count($pageData['data']) < $pageLimit) {
break;
}
} while (--$maxPages > 0);
if ($bangumi_cache && !empty($dataList)) {
auto_update_cache($cache_key, json_encode([
'data' => $dataList,
'total' => $total,
]));
}
return array_filter($dataList, function ($item) {
return in_array($item['type'], [2, 3]);
});
}
$response = wp_remote_get($url, [
'user-agent' => 'mirai-mamori/Sakurairo(...):WordPressTheme',
'timeout' => 15,
]); |
|
补充一个问题:关键 API 接口, 似乎最近几天开始,Bangumi 的几个域名(bgm.tv、bangumi.tv、chii.in)在中国大陆出现大面积连接故障,监测数据显示符合 GFW/运营商 DNS 污染的典型特征。这意味着部署在国内服务器上的 WordPress 站点, 这不是本 PR 需要解决的问题,但建议在官方决定并修复问题时在代码或文档中加一条提示,告知国内用户可能需要自行配置代理或通过其他方式确保服务器能访问 一些可以了解的信息来源:https://news.17173.com/content/05302026/145056389.shtml |
强化了数据返回的判断逻辑; 删掉了防御性的'subject_type'判断; 延长了超时时间。
|
非常感谢review意见@Sualiu ,已经进行了一些修改。
|
|
这样理解了,
这样这样,知道了,谢谢。 |
|
另外,同步拉取应该只要在实现了WP-Cron后就好了。不过WP-Cron的PR应该需要在项目维护者的肯定后再实施,避免做无用功。
应该会比每次翻页都请求 Bangumi API 更可靠 另外,你似乎没有使用AI辅助分析,有些佩服。因为手写真的特别费时间。再次感谢你的认真回复。 |
|
好哎,我也感觉后台定期更新、读取缓存切片会更可靠一些,而且用户体验会比较好。不过我试了一下,和之前提到的一样,bangumi的api目前不能直接访问。唉,这种网络问题就比较难办了 |
|
这个 PR 已经 45 天没有任何活动了,将被标记为过时 stale 。 删除 stale 的标签或评论,否则将在 10 天内关闭。 |
|
所以还合吗? |
修复追番页获取不全的问题 #1386
该php脚本会从
https://api.bgm.tv/拉取用户的追番列表,以json返回,存储在$collData中。然而,当用户追番数量较多时,这段程序没有正确处理分页参数,导致只能获取第一页的数据。现在,执行1次API调用后,会拿取第一页数据,并且根据返回的total参数判断是否有其他页的数据需要获取。如果有其他页,则调用若干次API获取全部番剧列表。