bgMDB是一个用于订阅TMDB番剧的CLI工具.
bgMDB的初衷是为了自动化 番剧订阅+EMBY/jellyfin/plex元数据刮削 这一过程,所以bgMDB的目标是 订阅一次,观看一季。
在拥有EMBY/jellyfin/plex 与 Aria2 配合的场景下,不再需要任何的手动操作,即可即时更新番剧。
bgMDB的整体思路是 TMDB获取番剧信息->使用蜜柑计划RSS获取下载链接->发送至Aria2下载
*PS:未来的路线可能开放其他RSS源及下载工具或者可自定义,见:TODO
# 使用TMDB链接进行订阅
> bgmdb add 'https://www.themoviedb.org/tv/94631'
使用docker(推荐)
docker pull syrati/bgmdb
# 这里用到的环境变量会在下文逐个讲解,请按照自己的实际情况填写
# 建议将/home/bgmdb/data目录挂载至宿主机,后续更新能够保留订阅信息
docker run -d \
-e BGMDB_SAVE_PATH='/path/to/save_bangumi' \
-e BGMDB_ARIA2_HOST='aria2.xxx.com' \
-e BGMDB_ARIA2_PORT=6800 \
-e BGMDB_ARIA2_SECRET='' \
-e BGMDB_SESSION_PATH='/home/bgmdb/data/bgmdb.session' \
-v ~/bgmdb/data:/home/bgmdb/data \
syrati/bgmdb
使用node
npm install -g bgmdb
export BGMDB_SAVE_PATH='/path/to/save_bangumi'
export .... #环境变量同上
npm install -g bgmdb@latest
变量名 | 描述 |
---|---|
BGMDB_SAVE_PATH | 番剧保存路径,此处需要特别声明的是,该路径会同时被bgMDB与Aria2访问,请确保两者之间的路径一致性。 |
BGMDB_ARIA2_HOST | 能够访问到Aria2的Hostname |
BGMDB_ARIA2_PORT | Aria2的JSONRPC端口,如果没有对Aria2的配置做过更改,可以直接使用默认值6800 |
BGMDB_ARIA2_SECRET | Aria2的JSONRPC SECRET |
BGMDB_SESSION_PATH | bgMDB的session路径,一般情况下无需更改 |
# 使用TMDB链接进行订阅
> bgmdb add 'https://www.themoviedb.org/tv/94631'
# 输出TMDB解析结果
解析成功! {
id: '/tv/94631',
chineseName: '放学后海堤日记',
releaseDate: '(2020)',
localName: '放課後ていぼう日誌',
link: 'https://www.themoviedb.org/tv/94631',
downloadTasks: [],
seasons: [ { index: 'S1', title: '第 1 季', progress: 0, episodes: [] } ]
}
《放学后海堤日记》RSS匹配开始!
现在开始匹配《S1-第 1 季》
请输入《S1-第 1 季》对应的蜜柑计划RSS链接,如需要略过本季可以直接留空
例如:https://mikanani.me/RSS/Bangumi?bangumiId=2206&subgroupid=37
# 输入字幕组RSS链接
> https://mikanani.me/RSS/Bangumi?bangumiId=2206&subgroupid=37
# 对订阅结果进行筛选
当前筛选后的结果如下: [
'第12话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第12话][1080p_AVC][简体]',
'第12话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第12话][1080p_AVC][繁体]',
'第11话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第11话][1080p_AVC][简体]',
'第11话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第11话][1080p_AVC][繁体]',
'第10话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第10话][1080p_AVC][简体]',
'第10话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第10话][1080p_AVC][繁体]',
'第9话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第09话][1080p_AVC][简体]',
'第9话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第09话][1080p_AVC][繁体]',
'第8话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第08话][1080p_AVC][简体]',
'第8话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第08话][1080p_AVC][繁体]',
'第7话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第07话][1080p_AVC][简体]',
'第7话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第07话][1080p_AVC][繁体]',
'第6话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第06话][1080p_AVC][简体]',
'第6话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第06话][1080p_AVC][繁体]',
'第5话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第05话][1080p_AVC][简体]',
'第5话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第05话][1080p_AVC][繁体]',
'第4话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第04话][1080p_AVC][简体]',
'第4话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第04话][1080p_AVC][繁体]',
'第3话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第03话][1080p_AVC][简体]',
'第3话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第03话][1080p_AVC][繁体]',
'第2话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第02话][1080p_AVC][简体]',
'第2话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第02话][1080p_AVC][繁体]',
'第1话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第01话][1080p_AVC][简体]',
'第1话 | 标题:【千夏字幕组】【放学後堤防日记_Houkago Teibou Nisshi】[第01话][1080p_AVC][繁体]'
]
*发现有重复的话/集*
请继续完善筛选条件:
1.条件可以留空
2.筛选只适用于标题
请输入想要包含的文字,多个请以英文逗号(,)隔开, 当前值:无
# 输入筛选的文本,可以留空,大小写不敏感,即1080p与1080P是等价的
> 1080p,简体
请输入想要排除的文字,多个请以英文逗号(,)隔开, 当前值:无
# 输入需要排除的文本,可以留空,大小写不敏感
> 繁体
请输入想要匹配的正则表达式,如/^123$/gi, 当前值:无
# 输入筛选用的正则表达式,可以留空
>
请输入想要排除的特征值,多个请以英文逗号(,)隔开, 当前值:无
# 输入筛选用的正则表达式,可以留空
>
# 当筛选结果的集数连贯并且不重复时,筛选结束
当前筛选后的结果如下: [
'第12话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第12话][1080p_AVC][简体]',
'第11话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第11话][1080p_AVC][简体]',
'第10话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第10话][1080p_AVC][简体]',
'第9话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第09话][1080p_AVC][简体]',
'第8话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第08话][1080p_AVC][简体]',
'第7话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第07话][1080p_AVC][简体]',
'第6话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第06话][1080p_AVC][简体]',
'第5话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第05话][1080p_AVC][简体]',
'第4话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第04话][1080p_AVC][简体]',
'第3话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第03话][1080p_AVC][简体]',
'第2话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第02话][1080p_AVC][简体]',
'第1话 | 标题:【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第01话][1080p_AVC][简体]'
]
筛选完成!
匹配完成! 需要下载全部已有内容吗?(y/n)
# 可以选择立即下载,也可以后续使用bgmdb update手动下载
> y
放学后海堤日记 开始下载...
保存路径:/mnt/media/bangumi/放課後ていぼう日誌(2020)
S1-第 1 季 开始下载...
保存路径:/mnt/media/bangumi/放課後ていぼう日誌(2020)/S1
第12话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第12话][1080p_AVC][简体] 已发送至Aria2.
第11话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第11话][1080p_AVC][简体] 已发送至Aria2.
第10话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第10话][1080p_AVC][简体] 已发送至Aria2.
第9话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第09话][1080p_AVC][简体] 已发送至Aria2.
第8话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第08话][1080p_AVC][简体] 已发送至Aria2.
第7话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第07话][1080p_AVC][简体] 已发送至Aria2.
第6话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第06话][1080p_AVC][简体] 已发送至Aria2.
第5话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第05话][1080p_AVC][简体] 已发送至Aria2.
第4话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第04话][1080p_AVC][简体] 已发送至Aria2.
第3话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第03话][1080p_AVC][简体] 已发送至Aria2.
第2话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第02话][1080p_AVC][简体] 已发送至Aria2.
第1话 | 【千夏字幕组】【放学后堤防日记_Houkago Teibou Nisshi】[第01话][1080p_AVC][简体] 已发送至Aria2.
任务已结束!
# 完成番剧订阅
# docker中默认设置了crontab任务 在使用docker的情况下一般不需要手动触发更新
bgmdb update
# docker中默认设置了crontab任务 在使用docker的情况下一般不需要手动触发整理任务
bgmdb organize
# 运行完成后的目录树如下
-- 放課後ていぼう日誌(2020)
- S1
- 1.mp4
- 2.mp4
- ...
- 12.mp4
为了方便emby/plex/jellyfin等多媒体软件进行元数据的刮削,我们一般会将目录树整理成可以识别的形式。bgMDB总结出的格式为:原产地名称(年份)/S${季编号}/${集编号}.mp4
。
但是由于aria2提供的能力有限,无法在建立下载任务的同时重命名bt下载的文件,所以需要在任务下载完成后进行重命名。bgmdb organize
就是为了完成这个任务。
当bgmdb建立下载任务时,会记录任务的id,bgmdb organize
会向aria2请求任务的状态,当任务被标记为完成时,将对目标文件进行整理的相关操作。如果运行时发现有个别任务未完成,那么只会处理已完成的任务。所以本命令一般需要轮询执行。docker中已经包含了轮询的crontab任务,如果使用node版本,则需要额外建立轮询任务。
> bgmdb list
# 输出列表 中文名/原产地名称(年份)
1.放学后海堤日记/放課後ていぼう日誌(2020)
# 这里使用TMDB提供的中文名或者原产地名称都可以
bgmdb remove 放学后海堤日记
# or
bgmdb remove 放課後ていぼう日誌
# 设置成功后 下一次bgmdb update将会从设置的集数开始下载
bgmdb mark 放学后海堤日记 S1 1
灵感来源:BGmi/BGmi
*由于BGmi设计上追求简洁,对EMBY/jellyfin/plex不做考虑,而我对于python也不尽熟悉,因此使用熟悉的node完成了本项目。