feat(identity): 豆瓣 / bgm.tv 辅助信息源与发现页
- adapters/meta:bgm.tv 官方 API(条目 / 搜索 / 每日放送)与豆瓣移动版接口(条目 / 实时热门) - 识别升级链:豆瓣条目缓存没有时在线查;AniBT 的 bgm ID、公开 BT 站标题搜 bgm → 名称 + 年份匹配 TMDB(季条目去季名与年份) - 条目缓存 30 天,查不到 6 小时负缓存;测试进程缺省不出外网 - 发现页:bgm 每日放送、豆瓣热门电影 / 剧集,点条目匹配 TMDB 作品 Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
b8876542b8
commit
709414778e
23 files changed
+958
-31
No files matched your search
@@ -0,0 +1,47 @@
|
||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||
import { DiscoverCalendar, type DiscoverItem, DiscoverList, DiscoverMatchResult } from "@umt/contracts";
|
||||
import { api } from "~/lib/api.ts";
|
||||
import { getParsed, parseOrThrow } from "./library.ts";
|
||||
|
||||
// 发现:bgm.tv 每日放送、豆瓣热门(服务端缓存 1 小时);点条目时匹配 TMDB 作品。
|
||||
|
||||
export const discoverKeys = {
|
||||
calendar: ["discover", "calendar"] as const,
|
||||
hot: (kind: "movie" | "tv") => ["discover", "douban-hot", kind] as const,
|
||||
};
|
||||
|
||||
export function useBangumiCalendar(enabled = true) {
|
||||
return useQuery({
|
||||
queryKey: discoverKeys.calendar,
|
||||
enabled,
|
||||
queryFn: ({ signal }) => getParsed(DiscoverCalendar, "/discover/bangumi-calendar", {}, signal),
|
||||
staleTime: 30 * 60_000,
|
||||
});
|
||||
}
|
||||
|
||||
export function useDoubanHot(kind: "movie" | "tv", enabled = true) {
|
||||
return useQuery({
|
||||
queryKey: discoverKeys.hot(kind),
|
||||
enabled,
|
||||
queryFn: ({ signal }) => getParsed(DiscoverList, "/discover/douban-hot", { kind }, signal),
|
||||
staleTime: 30 * 60_000,
|
||||
});
|
||||
}
|
||||
|
||||
export function useDiscoverMatch() {
|
||||
return useMutation({
|
||||
mutationFn: async (it: DiscoverItem) =>
|
||||
parseOrThrow(
|
||||
DiscoverMatchResult,
|
||||
await api.post<unknown>("/discover/tmdb-match", {
|
||||
source: it.source,
|
||||
id: it.id,
|
||||
title: it.title,
|
||||
aliases: it.aliases,
|
||||
year: it.year,
|
||||
kind: it.kind,
|
||||
}),
|
||||
"/discover/tmdb-match",
|
||||
),
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user