Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 36 additions & 6 deletions inc/classes/bangumi.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,21 +67,51 @@ private function fetchCollections()
}

if ($collData === null) {
$response = $this->http_get_contents($this->collectionApi);
// 先调用1次获取第1页数据。只关注番剧,设置每页50个(api上限最多50),偏移0
$baseUrl = $this->collectionApi . '?subject_type=2&limit=50&offset=0';
$response = $this->http_get_contents($baseUrl);
$collData = json_decode($response, true);

if (isset($collData['data']) && is_array($collData['data']) && $bangumi_cache) {
auto_update_cache($cache_key, $response);

// 获取第1页的data列表,并且查询追番数量的总量total
$dataList = isset($collData['data']) && is_array($collData['data']) ? $collData['data'] : [];
$total = isset($collData['total']) ? (int)$collData['total'] : count($dataList);

// 如果第一次没能获取全,再多次获取。共 $pages 次,还需获取 $pages-1 次
if ($total > count($dataList)) {
$pageLimit = 50;
$pages = (int)ceil($total / $pageLimit);
// 避免有人追番太多,导致太多调用卡死,设定调用总次数上线(10次)
$pages = min($pages, 10);
for ($i = 1; $i < $pages; $i++) {
$offset = $pageLimit * $i;
$url = $this->collectionApi . '?subject_type=2&limit=' . $pageLimit . '&offset=' . $offset;
$resp = $this->http_get_contents($url);
$respData = json_decode($resp, true);
# 把新获取到的列表合并到 $dataList 中
if (isset($respData['data']) && is_array($respData['data'])) {
$dataList = array_merge($dataList, $respData['data']);
}
}
}

// 整理数据,整合为 bangumi api的返回形式
$collData['data'] = $dataList;
$collData['limit'] = $total;
$collData['offset'] = 0;
$collData['total'] = $total;

if ($bangumi_cache && isset($collData['data']) && is_array($collData['data'])) {
auto_update_cache($cache_key, json_encode($collData));
}
}

// 过滤符合条件的数据
if (isset($collData['data']) && is_array($collData['data'])) {
$collDataArr = array_filter($collData['data'], function($item) {
return in_array($item['type'], [2, 3]) && $item['subject_type'] == 2;
});
}

return $collDataArr;
}

Expand Down