FlexGet 官网是这样描述自己的,媒体文件的多功能自动化工具。可以支持 torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, 等等作为输入。FlexGet 是 Python 编写的,所以如果想要实现更加复杂的功能,也可以自己写脚本来处理。
简单的来说,FlexGet 解决 BT 客户端没有订阅功能的问题,通过 FlexGet 可以方便的制定一些规则来自动订阅并自动下载特定的种子,比如在追剧集时,按照特定的名字以及文件大小,或者分辨率自动进行下载。
FlexGet 一大被称道的就是可以实现 PT 或者 BT 的自动下载,并且直接传给 Deluge, transmission, uTorrent, rTorrent, SABnzb 等等客户端进行下载。FlexGet 也集成了 trakt, thetvdb.com, imdb.com 等等网站可以用来追踪剧集。
FlexGet 可以自定义任务,自定义运行时间,有一个友好的 Web 界面,然后还有很多很多有待发现的功能。
在没有了解到 FlexGet 之前,我都是手动将 torrent 文件下载到 ~/Downloads
目录中,然后在 crontab 中将下载目录中的所有 torrent 文件 rsync 到 Transmission 或者 ruTorrent 的 watch 文件夹中的。
*/1 * * * * rsync -avz -e "ssh -p xxxx" --remove-source-files /home/einverne/Downloads/*.torrent xxx@ip:/share/Transmission/watch/
但是自从有了 Flexget 我发现借助 Flexget 可以实现很多自动化工作,以前手工执行的工作完全可以解放出来。比如将 PT 中收藏的内容添加到下载的 RSS 中,然后通过 Flexget 自动下载到硬盘中,比如自动下载 PT 中最近更新的 Free 种子。
docker install
使用 Docker 进行安装,我这里用的是 wiserain/flexget
镜像:1
这里的 PUID,PGID 可以在终端使用 id
命令来查看,替换成当前用户的 ID 即可。
docker run -d \
--name=flexget \
-e PUID=1000 \
-e PGID=1000 \
-e FG_WEBUI_PASSWD=yourhorriblesecret \
-e FG_LOG_LEVEL=info \
-e TZ=Asia/Shanghai \
-p 5050:5050 \
-v ~/flexget/config:/config \
-v ~/flexget/data:/data \
wiserain/flexget
说明:
~/flexget/config
: 目录中是 flexget 的配置文件~/flexget/data
: 目录保存 Flexget 下载的文件
或者使用 Docker Compose 安装。
docker-compose:
version: '3.3'
services:
flexget:
image: wiserain/flexget
restart: always
container_name: flexget
environment:
- PUID=1000
- PGID=1000
- FG_WEBUI_PASSWD=${PASSWD}
- FG_LOG_LEVEL=info
- TZ=Asia/Shanghai
ports:
- '5050:5050'
volumes:
- '~/flexget/config:/config'
- '~/flexget/data:/data'
等容器启动之后,访问 5050 端口,用户名 flexget
密码为在配置中设定的密码,访问后台。
Plugins
flexget 更多的插件可以在这里 查到。
配置详解
进入后台,或者直接编辑配置文件夹中的 config.yml
文件都可以直接对 flexget 进行配置,更推荐在命令行中进行修改。
一份简单的配置
首先来看一个最简单的配置,方便快速入门,这个配置仅有一个 task,并且只定义了一个定时器。
web_server:
bind: 0.0.0.0
port: 5050
web_ui: yes
tasks:
btschool:
rss: http://example.com/rss
# 种子的下载目录
download: /data
# 把 RSS 链接里的所有种子都下载下来,不做过滤
accept_all: yes
schedules:
- tasks: '*'
interval:
minutes: 60
上面的配置一目了然,也不过多解释,大致就是定义了一个RSS 下载任务,会下载这个 RSS 中所有的内容,并保存到 /data/
目录。
下面就单独演示一下稍微复杂一些的用例,比如过滤标题,文件大小,等等。
针对个别任务设置定时
在上面的配置中使用通配符 *
来匹配了所有的任务,如果要指定任务设定定时,可以
schedules:
- tasks: 'task_name'
interval:
minutes: 15
稍微复杂一些的配置
通过正则表达式过滤标题
tasks 定义:
# tasks 定义多个任务,在下方定义
tasks:
# 自定义 task 名字,名字可以自己起
task_name:
rss: http://example.com/torrentrss.php
# 可选项 yes/no,是否下载全部内容,还是按条件过滤
accept_all: no
regexp:
accept:
- some-title
reject:
- 1080
from: title
content_size:
min: 1000
max: 10000
strict: no
# 种子下载的路径
download: /data
deluge:
password: "deluge"
path: /data
another-task:
rss: https://example.com/torrentrss.php
accept_all: no
if:
- "'1996' in title": accept
- "'720' in title": accept
content_size:
min: 1000
max: 10000
strict: no
download: /data
deluge:
host: locahost
port: 13222
user: someone
password: "deluge"
path: /data
还可以通过配置预设模板的方法:
templates:
# 剩余空间监控,当配置的 path 路径的剩余空间小于 space 规定的数值时,停止 RSS 下载
freespace:
free_space:
path: /home/einverne
space: 10240
# qb 的模板,之后写 qb 就是指把种子推送到 qb 进行下载;下面 tr de rt 也是如此
qb:
qbittorrent:
path: /home/einverne/qbittorrent/download/
host: localhost
port: 2017
username: einverne
password: password
tr:
transmission:
path: /home/einverne/transmission/download/
host: localhost
port: 9091
username: einverne
password: password
de:
deluge:
path: /home/einverne/deluge/download/
host: localhost
port: 58846
username: einverne
password: password
# 体积过滤模板,min 是符合条件的最小种子体积,max 是符合条件的最大种子体积,单位均为 MB
# strict 默认是 yes,表示在无法确定大小的情况下就不下载,这里把它改成 no
# size 的意思是,只下载体积为 1000-666666 MB 的种子,其他不满足条件的种子不下载
size:
content_size:
min: 1000
max: 666666
strict: no
# 任务
tasks:
# Web-HDSky 是任务名称,基本上随便起
Web-HDSky:
rss: https://hdsky.me/torrentrss.php
# 因为 HDSWEB 发单集的时候用的标题是一样的, 因此下过一次后
# 之后新发出来的单集由于标题一样,flexget 会当成是以前已经下过的种子
# 为了避免这个问题,对 seen 插件设定为只检查 url 是否一致
seen:
fields:
- url
# 正则表达式;标题带 HDSWEB 的种子就下载(accept,接受),不想下载的话就写拒绝(reject)
regexp:
accept:
- HDSWEB
# 调用上边的 de 模板
template: de
# 可以不使用模板的体积过滤,针对每个任务单独设置体积过滤
content_size:
min: 3000
max: 500000
strict: no
# 以下设定实现的效果:对这个任务加载到 deluge 的种子,自动添加 WEB-DL 的标签
# 自动限制上传速度到 10MB/s(防止超速),下完后自动移动到 /mnt/HDSky/HDSWEB
deluge:
label: WEB-DL
# Limit upload speed to 100 MiB/s in case of being auto-banned
max_up_speed: 10240
move_completed_path: /mnt/HDSky/HDSWEB
ADC-AnimeBD-JPN:
rss: http://asiandvdclub.org/rss.xml
if:
- "'Anime' and 'AVC' in title": accept
- "'subs only' in title": reject
- "'Custom' in description": reject
# 这三个过滤条件组合起来就是,下载标题里带 Anime 和 AVC 且不含 subs only 的种子
# 并排除掉描述里含有 Custom 的种子
# 这也就约等于,RSS 日版动画蓝光碟(非日版、DIY 碟、DVD 都过滤掉)
# RSS ADC 需要 Cookies,这里我们用 headers 插件来加上 cookies
headers:
Cookie: "uid=12345; pass=abcdefg"
# 转换 RSS 链接,将原本形如 http://asiandvdclub.org/details.php?id=123456 的种子描述页面链接
# 替换为形如 http://asiandvdclub.org/download.php?id=123456 的种子下载链接
urlrewrite:
sitename:
regexp: 'http://asiandvdclub.org/details.php\?id=(?P<id>\d+)'
format: 'http://asiandvdclub.org/download.php?id=\g<id>'
qbittorrent:
label: ADC
# Flexget 支持添加种子到 qBittorrent 的时候自动设定单种限速
maxdownspeed: 30000
Web UI 设置
# Flexget WebUI 设定 (WebUI如何开启见后文)
web_server:
port: 6566
web_ui: yes
# base_url: /flexget
# base_url 是为了反代设置的,需要使用反代的话就取消这个的注释,然后在安装了 rTorrent 的情况下(不装 rt 的话没有 nginx)
# Flexget WebUI 地址就变成了 https://IP/flexget
Transmission 配置
如果要配置 Transmission 可以通过 Transmission 插件配置
tasks:
one-task:
rss: https://example.com/torrentrss.php
accept_all: no
# 通过正则表达式匹配标题中有 some-title 的内容,accept 表示接受,而 reject 表示带有 1080 的就不接受
regexp:
accept:
- some-title
reject:
- 1080
from: title
content_size:
min: 3000
max: 180000
strict: no
download: /data
transmission:
host: localhost
port: 9091
username: user
password: "pass"
更多该插件的参数和使用可以参考官网
template
如果需要配置更加复杂的,可以使用 template
templates:
# freespace 插件
freespace:
free_space:
path: /data
space: 10240
qb:
qbittorrent:
path: /data
host: localhost
port: 8080
username: admin
password: password
de:
deluge:
password: "deluge"
path: /data
tr:
transmission:
host: localhost
port: 9091
username: admin
password: "password"
tasks:
BTSchool:
rss: https://pt.btschool.net/torrentrss.php
accept_all: yes
template:
- de
HDChina:
rss: https://hdchina.org/torrentrss.php
accept_all: yes
template:
- qb
qbittorrent:
label: HDChina
CHDBits:
rss: https://chdbits.co/torrentrss.php
accept_all: no
if:
- "'CHDPAD' in title": reject
- "'CHDPad' in title": reject
- "'CHD' in title": accept
template:
- tr
U2:
rss: https://u2.dmhy.org/torrentrss.php
accept_all: no
regexp:
accept_excluding:
- DVD
- ADC
- TTG
- TSDM
from: title
download: /data/torrent/
Mteam:
rss: https://tp.m-team.cc/torrentrss.php
accept_all: no
regexp:
accept:
- sweety
from: title
download: /data/torrent/
GZtown:
rss: https://pt.gztown.net/torrentrss.php
accept_all: no
if:
- "'GZtown' in title": accept
download: /data/torrent/
HDSky:
rss: https://hdsky.me/torrentrss.php
accept_all: yes
download: /data/torrent/
Ourbits:
rss: https://ourbits.club/torrentrss.php
accept_all: yes
download: /data/torrent/
ezrss:
rss: http://eztv.ag/ezrss.xml
accept_all: yes
content_size:
min: 200
max: 4444
strict: no
download: /data
定义 Schedules
常见的定时器,比如定时每 10 分钟跑一次,或者在特定时间执行一次。
设置固定间隔时间执行:
# 针对所有的任务,每隔 10 分钟执行一次
schedules:
- tasks: '*'
interval:
minutes: 10
或者你可以设置更加复杂的定时规则,针对具体的任务名设定:[^schedule]
[^schedule]
schedules:
- tasks: 'Update-Queue'
interval:
hours: 3
- tasks: 'Series-*'
interval:
minutes: 30
- tasks: 'Movies-*'
interval:
hours: 1
- tasks: 'Update-trakt-*'
interval:
days: 1
at_time: 4:43 am
- tasks: [HDC, btschool]
interval:
minutes: 30
如果不配置 Schedule 也可以通过 cron 命令来定时执行,比如每隔 30 分钟执行一次:
*/30 * * * * /usr/local/bin/flexget --cron execute
常用命令
使用 Docker 安装的话,可以手动进入容器执行 sudo docker exec -it flexget /bin/bash
,然后执行:
flexget check
: 用于检查config.yml
配置文件是否有格式错误。flexget --test execute
: 手动模拟一次 RSS 操作,仅供测试,不会下载种子文件到本地。flexget execute
: 手动执行所有任务flexget execute --tasks Series-*
: 手动执行指定的任务flexget status
: 查看 flexget 的 RSS 记录。flexget execute --learn
: 这样子不会下载种子,但是会把这次 RSS 到的种子标记为已下载,这样之后就不会下到老种了
疑难杂症
下载后文件名乱码问题
查看终端编码是否配置了支持 UTF-8.
最后,个人搭建了一个私人的 PT,分享一些电影、图书、综艺,欢迎来玩。