诱因豆腐一不抽烟二不喝酒,唯一可以算得上嗜好的就是 Anime 了。而且喜欢追新番,每周一集从不落下。
坐在电脑前第一首要的的事情就是翻翻各大BT页,看关注的动画是否出新,时间久了便成了习惯虽然繁琐却也不觉着有什么不便。
但最近即将因为工作的原因不得不到外地去一个月,而且多半驻地没有网络,难道只能等回来用 eMule 慢慢拖了么?
如果可以做到自动下载BT种子然后进而下载相应的文件就好了,上网搜刮一番却没有发现合用的现成软件,看来又只能 DIY 了。
思路欲善其功,先利其器最近CMD脚本用得顺手、Curl也正合我用,老搭档一出手BT种子应该是手到擒来才是。
接着是BT下载的问题,BitComet是豆腐常用的,翻翻说明有支持命令行。嗯,就是它了。
最后是自动定时运行,不需其它软件捉刀,Windows自带的任务计划足以。
知己知彼,百战不殆要想从别人那里拿东西,当然就得熟悉别人的规矩。对于提供BT种子的网页要分别分析其结构才行,选择那些结构明晰的可以省不少功夫。
以豆腐常常出没的漫游BT页为例:
全部包含种子的条目都是在一个
里面每个元素里面的结构都是有序的分为置顶和一般两种情况。 如此一来就便于用 FOR 来取得相应的 URL。再看 href 里面的 HASH 值正是实际种子文件的文件名,这样用 CURL 来取是再方便不过了。 而且只要把每次已经下载的种子的文件名保存到一个外部文件,在反复执行的时候就可以通过比较来排除这些已经下载过的文件。
实践
为了顺藤摸瓜,先用 Curl 取得BT页的首页:
- curl -o tmp.txt [url]http://bt.popgo.net/[/url]
要顺利找到欲下载的符合只定条件的项目,FINDSTR 是不错的选择,这里豆腐以‘漫游字幕组’为关键字的即可收录所有该组的作品:
- 'findstr "漫游字幕组" tmp.txt^|findstr "href"'
分析 tmp.txt 文件之后决定用‘=’和‘>’作分隔符,取出分割后的第5、6、9段字符串存入环境变量 i、j、k, 利用变量 i 来判断是否置顶的条目,如果是则 k 为种子文件名,否则 j 为种子文件名。 最后再对字符串作相应的截取处理,在代入 Curl 参数取得种子文件之前还要检查是否该文件已经被下载过了:
- for /f "tokens=5,6,9 delims==>" %%i in ('findstr "漫游字幕组" tmp.txt^|findstr "href"') do (
- set flag=1
- set tmp=%%i
- if "!tmp:~1,2%!"=="置顶" (
- set temp=%%k
- set posthash=!temp:~0,-1%!
- ) else (
- set temp=%%j
- set posthash=!temp:~0,-1%!
- )
- for /f "delims=" %%j in (download.txt) do if !posthash!==%%j set flag=0
- if !flag!==1 (
- curl -O [url]http://bt.popgo.net/allowed/[/url]!posthash!.torrent
- )
- )
得到种子文件之后,用 START 命令来给 BitComet.exe 传送命令行参数启动BT下载。 ‘/s’代表不需要确认立即开始下载的安静模式;‘/tray’代表启动时最小化到系统托盘;‘/o’代表储存文件的路径:
- start bitcomet.exe /s /tray !posthash!.torrent /o e:\downloads\
最后把已经下载过的文件名存入 download.txt 文件,以便下次使用:
- @echo !posthash!>>download.txt
完成
最终完整代码为:
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- curl -o tmp.txt [url]http://bt.popgo.net/[/url]
- for /f "tokens=5,6,9 delims==>" %%i in ('findstr "漫游字幕组" tmp.txt^|findstr "href"') do (
- set flag=1
- set tmp=%%i
- if "!tmp:~1,2%!"=="置顶" (
- set temp=%%k
- set posthash=!temp:~0,-1%!
- ) else (
- set temp=%%j
- set posthash=!temp:~0,-1%!
- )
- for /f "delims=" %%j in (download.txt) do if !posthash!==%%j set flag=0
- if !flag!==1 (
- curl -O [url]http://bt.popgo.net/allowed/[/url]!posthash!.torrent
- start bitcomet.exe /s /tray !posthash!.torrent /o e:\downloads\
- @echo !posthash!>>download.txt
- )
- )
- endlocal
把上述代码保存为test.cmd,确认Task Scheduler为‘自动’,启动任务计划新增一个任务执行test.cmd。 设定开始时间为每天 0:00 开始、每隔 30 分钟、为时 24 小时就行了:
该脚本将每隔 30 分钟检查一次指定网站,下载最新的漫游字幕组的翻译作品。至此大功告成,豆腐终于可以安心外出了。
本文为chenke_ikari原创,首发于豆腐的简陋小屋 本文采用Creative Commons 署名-非商业性使用-相同方式共享 2.5 China 许可协议 进行许可
|
|
级别: 新手上路
- 注册时间:
- 2007-01-09
- 在线时间:
- 0小时
- 发帖:
- 1
|
有人测试过吗?
我今天用了一下脚本,结果抓下来的种子只有1字节,不知道怎么回事。 还有,谁知道楼主的QQ,我想和他联系一下。 我的QQ:32608324
|
|
级别: 小荷初露
- 注册时间:
- 2004-10-23
- 在线时间:
- 0小时
- 发帖:
- 181
|
引用 最初由 wking 发布 问个无关紧要的问题,为啥存成.CMD扩展名的?.BAT不行?
佩服楼主的,我就编不出来~
BAT应该也可以,习惯问题而已... BAT总让人想到DOS下的批处理,CMD一看就知道是Windows命令行的脚本...我是个无聊的人吧...
|
|
级别: 天使
- 注册时间:
- 2002-06-28
- 在线时间:
- 3402小时
- 发帖:
- 36494
|
|
|
级别: 工作组
- 注册时间:
- 2006-06-01
- 在线时间:
- 128小时
- 发帖:
- 4451
|
问个无关紧要的问题,为啥存成.CMD扩展名的?.BAT不行?
佩服楼主的,我就编不出来~
|
|
级别: 小荷初露
- 注册时间:
- 2004-10-23
- 在线时间:
- 0小时
- 发帖:
- 181
|
引用 最初由 wking 发布
水母同学,那是你网络不行啊……我最少都100KB/S以上的。上传得限速300KB/S
好网路...对于ADSL这种弱上传type的方式, 养驴实在是有心无力...
|
|
级别: 工作组
- 注册时间:
- 2006-06-01
- 在线时间:
- 128小时
- 发帖:
- 4451
|
引用 最初由 谜一样的水母殿 发布 EMULE主要是实在太慢,即使是HighID有时候也只有20K/S
BT种子多的文件有时候快到飞起,这点EM怎么都达不到啊
水母同学,那是你网络不行啊……我最少都100KB/S以上的。上传得限速300KB/S
|
|
级别: 工作组
- 注册时间:
- 2005-07-31
- 在线时间:
- 1小时
- 发帖:
- 18157
|
EMULE主要是实在太慢,即使是HighID有时候也只有20K/S
BT种子多的文件有时候快到飞起,这点EM怎么都达不到啊
|
|
级别: 小荷初露
- 注册时间:
- 2004-10-23
- 在线时间:
- 0小时
- 发帖:
- 181
|
引用 最初由 wking 发布 既然电脑能24小时开着,那回家再用EMULE下载不就行了? 或者把EMULE的WEB控制打开,让朋友帮忙添加下最新动漫ED2K链接不就行了?
要出去月余,回来再下实在很慢... 对emule没好感...一般只作补档用... 而且拜托人家总是不方便啦,一大堆事项要交代... 而且平时用也不错,不需要在发布页乱乱爬了
|
|
级别: 工作组
- 注册时间:
- 2006-06-01
- 在线时间:
- 128小时
- 发帖:
- 4451
|
既然电脑能24小时开着,那回家再用EMULE下载不就行了? 或者把EMULE的WEB控制打开,让朋友帮忙添加下最新动漫ED2K链接不就行了?
|
|
级别: 小荷初露
- 注册时间:
- 2004-10-23
- 在线时间:
- 0小时
- 发帖:
- 181
|
|
|