-
Notifications
You must be signed in to change notification settings - Fork 0
TMDB Watchlist Integration
tanmoumou252 edited this page Jul 11, 2026
·
2 revisions
TMDB 集成由三个组件组成:
-
TmdbClient(src/tmdb_client.py)— TMDB API v3 客户端 -
TmdbWatchlistDb(src/tmdb_watchlist_db.py)— SQLite 缓存 + 配置存储 -
watchlist_match(src/watchlist_match.py)— 待看列表与 B 区本地收录的匹配逻辑
支持两种认证方式:
- Access Token(v4 Bearer)— 首选,用于账户特定端点
- API Key(v3 查询参数)— 基本数据访问的备用方式
两种代理机制:
-
反向代理 host:设置
tmdb.host为自定义 TMDB 反向代理 -
HTTP/HTTPS 代理:设置
tmdb.proxy段
| 方法 | 端点 | 用途 |
|---|---|---|
get_account_details() |
/3/account/{account_id} |
获取账户信息 |
get_watchlist_movies() |
/3/account/{account_id}/watchlist/movies |
电影待看列表 |
get_watchlist_tv() |
/3/account/{account_id}/watchlist/tv |
剧集待看列表 |
get_movie_details(id) |
/3/movie/{id} |
电影详情(含 append_to_response) |
get_tv_details(id) |
/3/tv/{id} |
剧集详情 |
search_movie(query) |
/3/search/movie |
搜索电影 |
search_tv(query) |
/3/search/tv |
搜索剧集 |
get_movie_alternative_titles(id) |
/3/movie/{id}/alternative_titles |
别名 |
get_tv_alternative_titles(id) |
/3/tv/{id}/alternative_titles |
别名 |
四张表:movies、tv、meta、webui_config。TmdbWatchlistDb 使用 ThreadPoolExecutor 并行同步。
默认 604800 秒(7 天)。可通过 WebUI 配置页 → TMDB 设置中的"缓存 TTL(秒)"字段调整。
将 TMDB 待看列表条目与本地 B 区收录匹配是一个非标准媒体集合对齐问题:
- B 区文件夹名可能含噪音(如"番剧 1-3 季全集")
- 多个 TMDB 条目可能共享相同名称(如不同版本的"GTO")
- 中文名 vs 原名不匹配
- 需要季集结构分析
对每个待看条目按以下名称搜索 B 区:
- 标题(原文和翻译)
- 别名(来自 TMDB 别名端点)
- 中文译名
使用 SequenceMatcher 模糊匹配,阈值可通过 WebUI 配置页 → TMDB 设置中的"模糊匹配阈值"字段调整(fuzzy_threshold,默认 0.60)。
标题匹配后通过结构分析验证:
电视剧:
-
_compute_media_root()— 提取媒体根文件夹 -
_extract_season_from_local_path()— 统计季数和集数 - 对比 TMDB 的
_season_count和_last_ep_episode -
anime_min_ep_ratio(默认 0.30,可通过 WebUI 配置页 → TMDB 设置中的"番剧最少集数比例"字段调整)— 本地集数 >= TMDB 集数的 30% -
anime_max_season_diff(默认 1,可通过 WebUI 配置页 → TMDB 设置中的"番剧最大季数差"字段调整)— 季数最多差 1
电影:
- 按文件夹名相似度匹配
- 无结构验证
| 状态 | 说明 |
|---|---|
uncomputed |
尚未尝试匹配 |
matched |
在 B 区找到,置信度足够 |
unmatched |
未在 B 区找到 |
ambiguous |
多个可能匹配,无法区分 |
用户可通过 WebUI 手动覆盖匹配状态。
TMDB 待看列表页面提供:
- 海报网格,延迟加载图片
- 季数条(电视剧可视化季数指示)
- 筛选控制:全部/已收录/未收录
- 卡片翻转:点击显示详情和匹配原因
- 同步按钮:从 TMDB API 刷新待看列表
- 导出:CSV 和 JSON 格式
加载时检查缓存是否过期,过期则显示弹窗(可勾选"不再提醒")。
每个卡片显示收录状态、匹配原因。收录状态通过 match_status 字段跟踪,match_reason 记录匹配依据。
🏡 返回 Wiki 首页 • 💻 项目源码仓库 • 🐛 提交 Bug / 建议 • 📦 下载最新版本
🚨 安全与自保黄金法则(每页必读)
- 严禁随意重置 OpenList 令牌:播放签名(
?sign=)强依赖服务端密钥。一旦重置,B区所有.strm将瞬间失效报无权播放,只能清库重来!- 调试阶段切勿使用 DELETE:
DELETE会物理删除云端文件,极其危险!建议终身配置为action = "MOVE"(云端一比一树状回收站模式)。- 放心刮削,资产安全:空文件夹清理算法采用严格的零物理文件判定,含有海报图片、
.nfo、外部字幕的目录绝对不会被误删。
本项目遵循 MIT 开源协议。数据无价,请在充分测试后接入生产环境。