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 中收藏的内容自动下载到硬盘中,比如自动下载 PT 中最近更新的 Free 种子。

docker install

使用 Docker 进行安装,我这里用的是 wiserain/flexget 镜像:1

这里的 PUID,PGID 可以在终端使用 id 命令来查看,替换成当前用户的 ID 即可。

docker create \
    --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 下载的文件

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¬

上面的配置一目了然,也不过多解释,下面就单独演示一下稍微复杂一些的用例,比如过滤标题,文件大小,等等。

稍微复杂一些的配置

通过正则表达式过滤标题

# 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

Transmission 配置

如果要配置 Transmission 可以通过 Transmission 插件配置

tasks:
  one-task:
    rss: https://example.com/torrentrss.php
    accept_all: no
    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

常用命令

使用 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 到的种子标记为已下载,这样之后就不会下到老种了

疑难杂症

下载后文件名乱码问题

reference