- 从今天开始我们来写一个美剧自动嗅探下载器, 名为 TVDragon, 为我们提供美剧‘一条龙服务’。 其工作原理是根据已订阅的美剧名称(英文名),自动搜索当天的美剧播放表, 从种子网站搜索 torrent 列表, 筛选,自动下载该种子,接着上传torrent到树莓派的 transmission 上进行bt下载。
一、背景
本人是个美剧爱好者,平时几乎每天都有一部美剧更新,而我每天我要做的事情是上 <zimuzu.tv> 去查看当天的美剧播放表, 然后到<torrentz2.eu>搜索所追美剧的种子, 然后根据清晰度筛选,下载,上传后 transmission 进行资源下载。整个过程虽耗时不长, 但有时当天的美剧有好几部, 而且不一定资源已上传, 这就需要重复上述的步骤了。有时之后就会忘记了, 因此造成晚上下班后才去下载,不能好好的享用“美剧大餐”了。这就是 TVDragon 诞生的背景了。
二、必备条件(材料)
若要TVDragon 成功运行, 需要满足以下条件
- 7x24小时运行的Linux服务器(树莓派)
- 宽带网络
- transmission 软件
- PHP7.0+
三、APi 分析
既然我们需要爬取美剧播放表和搜索美剧种子等, 就需要用到Charles这个抓包神器。关于 Charles 的用法可自行搜索,这里不作描述。
1、许多网站都有美剧的播放表,我选择 <zimuzu.tv>上的,而且这里我选用了字幕组IOS非 App Store 版 app作为抓包目标。
经分析, App 上面的播放表 api 是https://api1.ousns.net/index.php ,其需要的参数是
1 | { |
我们这里只需要改变 start 和 end 的值即可获取不同日期的当天美剧播放列表, 但不包含 end 日期的数据
响应内容是
1 |
|
status=1 表示请求成功。data 字段里的数据就是我们真正需要的,里面包含了每部美剧的中文名、英文名和剧集数量等等
2、根据美剧英文名搜索 torrent 种子列表。
这里选择https://torrentz2.eu/search作为搜索的工具。请求参数很简单:
1 | { |
f 表示搜索的关键字,关键字中的空格转变为+或 urlEcode ;例如:the flash 2014 s04e09 搜索时变为:the%2Bflash%2B2014%2Bs04e09;
save 表示是否开启安全搜索,默认开启。
##### 返回结果
![d.png](http://ww4.sinaimg.cn/large/a15b4afegy1fmjw8ki15ij20ya0ba782)
更多的搜索结果可查看
<https://torrentz2.eu/search?f=the%2Bflash%2B2014%2Bs04e09>
#### 3、查看可用的 torrent 列表
经过上面的搜索后, 我们可以选择清晰度较高的一个资源查看其可用的 torrent 下载列表。
选择这个资源<The.Flash.2014.S04E09.720p.HDTV.x264-SVA[rarbg]>,之后可以看到如下的 torrent 列表:
![torrent 列表](http://ww4.sinaimg.cn/large/a15b4afegy1fmjwdvfcswj20yv0j50zn)
这里的 torrent 列表可能每一次都不一致的, 因此需要找一个资源列表最多的站点, 对每个站点都分析其下载 torrent 的按钮元素和事件, 方可自动下载 torrent 文件。
``
这里建议若有 rarbg 站点, 首选这个。大多数情况 rarbg 都会比较快更新资源。
``
更快捷的方法是:根据搜索列表中的 title 中 hash 值解析出 torrent 的真实地址。 规则:
``
http://itorrents.org/torrent/hash 值.torrent
``
### 四、Transmission 远程调用接口
##### 关于树莓派是什么?如何购买树莓派?如何在树莓派安装 transmission等等问题,可自行摸索。这里假设一切条件就绪。
通过上面的步骤我们已经能够实现自动下载 torrent 文件了。既然这样我们需要把 torrent 文件上传到 Transmission 上进资源下载。<transmission.com>上的文档有说明RPC 的方法, 还推荐了几个比较好的类库。
这里我们使用 PHP 实现的transmission RPC类库, <https://github.com/vohof/transmission>.
### 五、结束
到这里为止, 我们基本分析了TVDragon 的工作流程和梳理如何实现这些需求,关键之处就是如何分析所需要的目标程序, 拆分各个功能需求, 搜索是否已有类似的类库, 这样可减少我们的前期工作量。调研工作已基本结束, 后面的事情就是如何搭建一个开发框架了。这将在下一盘文章中阐述。