Plex 与 AniList 同步
如果您使用 Plex 管理您的动漫,这将允许您将库同步到 AniList。建议将 Plex 与 HAMA 代理 配合使用,以获得最佳的动漫名称匹配。
Plex 中未观看的动漫不会被同步,只有至少观看过一集的动漫才会被同步。更新到 AniList 只会发送变更,所以不用担心会影响观看历史。
这个版本基于我之前的项目 PlexMalSync,由于 MAL 关闭了他们的 API,该项目不再可用。如果将来情况发生变化,我会重新开始开发该项目。
如果您想先测试而不更新实际的 AniList 条目,请查看本README的"可选功能"部分中的"跳过列表更新以进行测试"
设置
步骤 1 - 安装 Python
确保您安装了 Python 3.8 或更高版本:
步骤 2 - 下载项目文件
使用您喜欢的 git 客户端获取最新版本,或从以下链接下载最新发布版:
https://github.com/RickDB/PlexAniSync/archive/master.zip
步骤 3 - 配置
在项目目录中,将 settings.ini.example
重命名为 settings.ini
,用您喜欢的文本编辑器打开 settings.ini
并根据需要进行编辑。
Plex
只选择一种认证方法,MyPlex 是最简单的。
MyPlex 认证(推荐)
对于 MyPlex 认证,您需要 Plex 服务器名称、用户名和 Plex 令牌。
获取 Plex 令牌的方法在这里描述:https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
以下是同步管理员账户的示例:
[PLEX]
anime_section = Anime
authentication_method = myplex
server = Sadala
myplex_user = Goku
myplex_token = abcdef123456789
这完成了 MyPlex 认证。仅当您想要同步非管理员的特定 Plex Home 用户时,才需要按照以下说明操作:
为此,请在 Plex 服务器上查找 home 用户名,并填写完整的 Plex 服务器 URL,例如:
[PLEX]
anime_section = Anime
authentication_method = myplex
# MyPlex
server = Sadala
myplex_user = John # 必须是 Plex 管理员用户账户
myplex_token = abcdef123456789
# 如果启用 home_user_sync,它将只同步特定的 Plex home 用户,这需要您的 Plex 服务器的完整 URL,就像直接 IP 方法一样
# home_username 是实际的 Plex home 用户名,而不是他们的电子邮件地址,这也区分大小写
home_user_sync = True
home_username = Megumin # 您想要同步的 home 用户账户,不能是管理员用户
home_server_base_url = http://127.0.0.1:32400
直接 Plex 认证(高级用户)
直接认证方法适用于不想使用 Plex 在线认证系统的用户,但设置更复杂。对此,您需要手动查找您的令牌:
https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
之后可以输入您的完整 Plex 站点 URL 和上述认证令牌,例如:
[PLEX]
anime_section = Anime
authentication_method = direct
base_url = http://192.168.1.234:32400
token = abcdef123456789
分区配置
在设置文件中输入包含您的动漫的Plex库/分区名称,例如:
[PLEX]
anime_section = 动漫
现在支持多个库,您可以使用管道符号("|")来分隔它们,如下所示:
[PLEX]
anime_section = 动漫|动漫2
AniList
对于AniList,您需要获取一个所谓的"access_token",您可以通过以下链接获取,如果未登录,系统会要求您登录:
https://anilist.co/api/v2/oauth/authorize?client_id=1549&response_type=token
确保复制整个密钥,因为它非常长,并将其粘贴到设置文件的"access_token"下,无需将其括起来,直接粘贴即可。
该令牌仅在1年内有效,因此您需要每年重复此过程。
之后,请确保也填写您的AniList用户名,这是您的实际用户名,而不是电子邮件地址,例如:
[ANILIST]
username = GoblinSlayer
access_token = iLikeToastyGoblins.
步骤4 - 安装依赖
在项目文件夹中使用Python包安装器(pip)安装额外的依赖:
pip install -r requirements.txt
步骤5 - 开始同步
现在配置已完成,依赖已安装,我们终于可以启动同步脚本了:
python PlexAniSync.py
根据库的大小和服务器的情况,可能需要几分钟才能完成。对于定期同步,您可以创建一个cron作业、systemd定时器或Windows任务,例如每30分钟运行一次。
有关如何使用systemd设置定时器的教程,请参阅Systemd服务。
可选功能
自定义动漫映射
您可以手动将Plex标题和季度链接到AniList ID,方法如下:
- 从项目文件夹中复制
custom_mappings.yaml.example
为custom_mappings.yaml
- 按以下格式在其中添加新条目:
- title: "Plex中的系列标题"
seasons:
- season: Plex季度
anilist-id: AniList系列ID
- season: Plex季度
anilist-id: AniList系列ID
如果Plex季度应该分为两个季度,可以为每个季度添加一个可选的start
参数,如下所示:
- title: "Re:从零开始的异世界生活"
seasons:
- season: 2
anilist-id: 108632
start: 1
- season: 2
anilist-id: 119661
start: 14
第1-13集将映射到Re:Zero第二季第一部分,第14集及以后将映射到Re:Zero第二季第二部分。
- 要找出AniList ID,您可以访问系列页面并从网站URL中复制它,例如,我的盾之勇者ID为99263:
https://anilist.co/anime/99263/Tate-no-Yuusha-no-Nariagari
- 您可以从示例文件中删除任何现有条目,因为它们纯粹是用于说明目的
- 在启动时,它将检查文件是否为有效的YAML文件。最可能的原因是您没有在包含特殊字符(例如":")的动漫标题周围加上引号。
重复的Plex标题
对于标题相同的Plex节目和电影,请在映射中使用可选的guid
字段。
例如,这两个《浪客剑心》节目在Plex中都显示为"浪客剑心":
- title: "浪客剑心"
guid: plex://show/5d9c07ece264b7001fc38094
seasons:
- season: 1
anilist-id: 45
- season: 2
anilist-id: 45
- season: 3
anilist-id: 45
- title: "浪客剑心 (2023)"
guid: plex://show/6330a57e9705fab2b34f656d
seasons:
- season: 1
anilist-id: 142877
当设置了 guid
字段时,title
和 synonyms
字段将被忽略。但为了便于人类阅读,你仍应使用不同的标题。
要找到 guid,请按以下步骤操作:
- 在隐私浏览窗口中打开此 URL:https://app.plex.tv/desktop/#!/search?pivot=top&query=
- 搜索你的系列或电影,并点击正确的条目
- 复制
metadata%2F
之后的所有内容,例如对于 https://app.plex.tv/desktop/#!/provider/tv.plex.provider.discover/details?key=%2Flibrary%2Fmetadata%2F6330a57e9705fab2b34f656d,复制6330a57e9705fab2b34f656d
- 如果是电视节目,在该标识符前添加
plex://show/
,对于电影则使用plex://movie/
社区映射
Github 社区在 https://github.com/RickDB/PlexAniSync-Custom-Mappings/ 提供了一些映射。你可以通过在示例映射文件中指定 remote-urls
来使用它们。
如果本地映射文件包含与社区映射相同节目的映射,本地映射将优先。
同义词功能是为社区映射引入的,你可以指定一个节目可以有多个标题,但应该以相同的方式映射。请参见示例映射文件中的 Shaman King (2021)。
自定义设置文件位置
如果你想加载不同的 settings.in 文件,可以在第一个参数中指定,如下所示:
python PlexAniSync.py settings_alternate.ini
对于 Tautulli 同步辅助脚本,你也可以这样做,第一个参数将是设置文件名,第二个参数将是系列名称,如下所示:
python TautulliSyncHelper.py settings_alternate.ini <plex 节目名称>
使 Plex 观看集数优先
默认情况下,如果 AniList 观看集数高于 Plex,它将跳过,这可以通过设置 plex_episode_count_priority
来覆盖。
当设置为 True 时,如果 Plex 观看集数高于 0,它将更新 AniList 条目,并且不会考虑 AniList 观看集数,即使后者更高。
请谨慎使用,因为通常不需要这样做,只适用于某些特定情况。
使用 Plex 评分作为 Anilist 分数
在 Plex 中,你可以给节目、季和集评 1 到 5 颗星。在移动应用程序上,如果你参与了 Discover Together Beta,你还可以以半星增量进行评分。
设置 sync_ratings = True
可以根据 Plex 评分自动设置 Anilist 分数。这也会改变你过去已完成节目的分数。
如果一个或多个 Plex 季映射到一个 Anilist 条目,将使用已评分季的平均值。原始 Anilist 分数将是 Plex 星级数 * 20
。所以如果你给一季评 3.5 星,另一季评 4 星,计算出的 Anilist 分数将是 75。
如果季没有评分,将使用节目评分作为后备。
目前不使用单集评分。
你的动画列表中显示的实际分数取决于 https://anilist.co/settings/lists 的评分系统设置
评分系统 | 显示的分数 |
---|---|
100 分制 | 75 |
10 分制(小数) | 7.5 |
10 分制 | 7(向下取整) |
5 星制 | 4 星(向上取整) |
3 点表情符号 | 🙂 |
在所有情况下,Anilist 都会存储原始值 75,所以你可以随时更改评分系统而不会丢失数据。但请注意,3 点表情符号分数无法准确转换,所以你应该尽量避免使用。
跳过列表更新以进行测试
在你的设置文件中,有一个名为 skip_list_update
的设置,你可以将其设置为 True 或 False。如果设置为 True,它将不会更新你的 AniList,这在你想进行测试运行以检查一切是否正常时很有用。
Tautulli 同步辅助脚本
在项目文件夹中,你会找到 TautulliSyncHelper.py
,你可以用它来同步单个 Plex 节目到 AniList,用于 Tautulli 脚本通知(在播放停止时触发)。
使用方法如下:
python TautulliSyncHelper.py <plex 节目名称>
根据你的操作系统,确保将节目名称放在单引号或双引号之间,更多信息请参见 wiki 页面: https://github.com/RickDB/PlexAniSync/wiki/Tautulli-sync-script
Docker
PlexAniSync 可作为 Docker 镜像使用。
另一个内置 PlexAniSync 的 Tautulli Docker 容器可在此处找到:
Tautulli-PlexAniSync
文档
要求
支持
AniList
https://anilist.co/forum/thread/6443
Discord
计划
目前为未来版本计划的功能:
- 基于 HAMA 的 XREF 标题匹配,使用自定义列表和 AniDB
- 添加设置以跳过更新用户列表中已弃看状态的节目
- 支持动漫忽略列表(基于内容分级和/或标题)
- 改进错误处理