打造一个自动追新番的下载机:Flexget篇

上一篇讲到如何给Raspberry Pi配置Wifi,有了Wifi,我就可以把Raspberry Pi放在任何地方,只要有一根电源线就可以了。接下来我们来看如何实现自动追新番的功能。

要实现这样的功能,有个很好用的东西叫做Flexget。Flexget是一套用Python编写的软件,它可以实现智能过滤和下载所需的资源。简单来说,Flexget的工作流分为input、filter、output三个部分:input就是输入源,比如RSS甚至是网页;filter就是过滤器,可以从源中过滤出我们需要的条目;output就是将过滤出来的条目进行输出,比如输出给P2P下载软件来下载。这三个工作流都是依靠插件来完成的,除了官方插件之外,还有很多第三方插件可以使用,灵活性非常高。

Flexget是基于Python的,而Raspberry Pi的官方Debian系统中已经内置了Python,因此我们可以直接来安装Flexget。除了Raspberry Pi之外,理论上任何支持Python的设备都可以运行Flexget,这里面也包括一些路由器和NAS设备。首先我们来安装Python的包管理程序pip:

$ sudo apt-get install python-pip

然后通过pip来安装Flexget:

$ sudo pip install flexget

由于Raspberry Pi的CPU比较烂,这一步需要的时间比较长,请耐心等待。安装完成之后我们就可以来编写Flexget的配置文件啦。Flexget的配置文件采用YAML来编写,不过你不必深入理解YAML,因为它是一种非常简单易读的格式,看几个例子就会了。配置文件需要放在“~/.flexget/”路径中并命名为“config.yml”,可以用nano来创建并编辑一个新的配置文件:

$ nano ~/.flexget/config.yml

先看一个简单的例子:

tasks:
  Railgun_S:
    rss: http://share.dmhy.me/topics/rss/team_id/58/rss.xml?keyword=%E8%B6%85%E9%9B%BB%E7%A3%81%E7%82%AES+MP4+720p
    accept_all: yes
    transmission:
      host: localhost
      port: 9091
      username: transmission
      password: yourpassword
      removewhendone: yes
    email:
      active: True
      from: john.smith@gmail.com
      to: john.smith@gmail.com
      smtp_host: smtp.gmail.com
      smtp_port: 587
      smtp_username: john.smith@gmail.com
      smtp_password: yourpassword
      smtp_tls: true

在这个例子,我们采用了一个RSS作为输入源,这个RSS来自动漫花园分享站,RSS输出本身支持按照字幕组和关键字来进行过滤,这个例子中keyword后面的关键字是“超电磁炮S+MP4+720p”,“team_id/58”表示“澄空学园”字幕组,通过过滤,我们就得到了指定字幕组、指定片名、指定格式、指定分辨率的RSS列表。由于RSS已经精确包含了我们要下载的资源,就不需要通过Flexget再次进行过滤了,因此filter步骤我们很简单地使用了accept_all,当然,Flexget还支持更复杂的匹配方式,例如正则表达式。后面我们设置了两个output:一个是Transmission,这是一个很有名的P2P下载软件,Flexget支持和Transmission无缝整合,在这里Flexget会将找到的资源(可以是种子文件也可以是磁力链接,动漫花园的RSS采用的是磁力链接)发送到Transmission进行下载;第二个output是email,也就是发送一封邮件到指定的邮箱,这样每次Flexget发现并下载新番,我们就可以收到通知啦。

要完成上面这个例子中的功能,我们还要安装和配置好Transmission:

$ sudo apt-get install transmission-daemon

注意,我们要安装的是“transmission-daemon”,而不是“transmission”,后者是一个带GUI的客户端,前者是一个后台服务,由于我们采用headless服务器的模式工作,因此应该选择前者。安装好之后transmissiond(后台服务的程序名)会自动启动,不过由于我们需要先修改配置文件,因此最好先将服务关掉:

$ sudo service transmission-daemon stop

然后用nano来编辑Transmission的配置文件:

$ sudo nano /etc/transmission-daemon/settings.json

这个配置文件中有很多项目,我们只把需要修改的几个项目列出来:

{
    "download-dir": "/home/pi/downloads/completed",
    "incomplete-dir": "/home/pi/downloads/incompleted",
    "incomplete-dir-enabled": true,
    "rpc-password": "yourpassword",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "transmission"
}

其中,“download-dir”用来配置默认的下载路径,“incomplete-dir”则是存放未完成文件的路径,在“incomplete-dir-enabled”为true时有效。接下来以rpc开头的都是远程控制相关的参数,包括用户名、密码、端口和URL地址,这些信息需要填写在Flexget的配置文件中。在配置下载路径时有一点需要注意,默认的下载路径是/var/lib/transmission-daemon/downloads/,这个目录的所有者是“debian-transmission”,由于Transmission是以这个帐户的身份运行的,因此要访问如/home/pi/(所有者帐户是“pi”)等位置的路径就会遇到权限问题。要解决这个问题有很多种方法,比如不改变默认的下载目录,但可以在你需要的地方建立symlink;或者可以将你需要设置的下载目录权限设置为777(即所有用户可访问);再或者可以将“pi”帐户加入到“debian-transmission”这个组里。更多关于在Raspberry Pi上配置Transmission的建议,可以参考这篇文章

配置好Transmission之后,重新启动transmissiond服务:

$ sudo service transmission-daemon start

然后我们就可以通过浏览器来连接Transmission的Web控制界面了,按照默认配置,访问地址是:

http://RaspberryPiIPAddress:9091/transmission/web/

输入用户名和密码就进去啦,在这个界面上就可以添加和管理下载任务,以及修改一些设置了。不过我们在这个例子中其实并不需要用到Web界面,但你可以通过访问Web界面来监测由Flexget自动添加的任务。一切顺利的话,现在我们应该可以启动Flexget了:

$ flexget --test

“--test”选项表示模拟执行任务,Flexget会完成从解析RSS到连接Transmission的整个过程,但不会真的执行下载。如果配置正确,我们应该可以看到Flexget获取到了RSS中的所有条目,并成功连接到Transmission,如果其中任何一个环节有问题会有错误提示。注意,如果这部番目前已经出了若干集。Flexget会在第一次执行时下载目前为止所有已经播放的集数,然后它会记住已经下载过的集数,以后就只下载新出的集数了。如果到目前为止集数你已经看过,不希望Flexget在第一次执行时重新把他们下载一遍的话,可以运行下面的命令:

$ flexget --learn

这样,RSS中已经存在的集数就会被标记为已看,以后就会直接下载新出的集数了。

到此为止,我们还差最后一步,就是在系统中配置一个定时任务,让系统定时自动运行Flexget来执行我们配置好的下载任务。首先,我们来获取Flexget的完整路径:

$ which flexget
/usr/local/bin/flexget

命令的输出结果就是Flexget可执行文件的完整路径,我们需要将这个路径配置到crontab中:

$ crontab -e

这个命令会打开当前帐户的crontab配置文件,在里面添加一行:

@hourly /usr/local/bin/flexget --cron

其中“@hourly”表示每小时触发一次任务,我们还可以使用标准的cron配置语法来指定更精确的时间间隔。现在我们就大功告成啦,每周只要炮姐新的一集熟肉一出,Raspberry Pi就可以自动下载回来啦,还会发邮件通知哦~如果Flexget没能正常工作,可以查看“~/.flexget/flexget.log”日志文件看看究竟发生了什么样的问题。

下一篇我们来看看更多Flexget的配置技巧,以及如何使用shell脚本、mount网络共享目录等方法对下载到的文件进行更好地管理。

打造一个自动追新番的下载机:Flexget篇》上有3条评论

  1. 受教了,果壳上代码都没有markdown,格式是一坨一坨的,还是这里清晰。
    不过新番直接在bilibili上stream了。没空去下hdtvrip,直接上的BDrip,而且尽量要日本职人压制的版本。
    不知道Flexget能不能把内容输出到share,pd,fn之类日系p2p(他们好像要wine。。)
    或者输出到plowshare之类的免空加载器里面?

发表评论

电子邮件地址不会被公开。 必填项已用*标注