中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]利用Curl和任务计划打造自动BT下载BOT
作者:
标题: [原创]利用Curl和任务计划打造自动BT下载BOT 上一主题 | 下一主题
ikari
初级用户





积分 58
发帖 6
注册 2006-8-1
状态 离线
『楼 主』:  [原创]利用Curl和任务计划打造自动BT下载BOT

诱因

豆腐一不抽烟二不喝酒,唯一可以算得上嗜好的就是 Anime 了。而且喜欢追新番,每周一集从不落下。
坐在电脑前第一首要的的事情就是翻翻各大BT页,看关注的动画是否出新,时间久了便成了习惯虽然繁琐却也不觉着有什么不便。
但最近即将因为工作的原因不得不到外地去一个月,而且多半驻地没有网络,难道只能等回来用 eMule 慢慢拖了么?
如果可以做到自动下载BT种子然后进而下载相应的文件就好了,上网搜刮一番却没有发现合用的现成软件,看来又只能 DIY 了。

思路

欲善其功,先利其器

最近CMD脚本用得顺手、Curl也正合我用,老搭档一出手BT种子应该是手到擒来才是。
接着是BT下载的问题,BitComet是豆腐常用的,翻翻说明有支持命令行。嗯,就是它了。
最后是自动定时运行,不需其它软件捉刀,Windows自带的任务计划足以。

知己知彼,百战不殆

要想从别人那里拿东西,当然就得熟悉别人的规矩。对于提供BT种子的网页要分别分析其结构才行,选择那些结构明晰的可以省不少功夫。
以豆腐常常出没的漫游BT页为例:
全部包含种子的条目都是在一个<table>里面每个<td>元素里面的结构都是有序的分为置顶和一般两种情况。
如此一来就便于用 FOR 来取得相应的 URL。再看 href 里面的 HASH 值正是实际种子文件的文件名,这样用 CURL 来取是再方便不过了。
而且只要把每次已经下载的种子的文件名保存到一个外部文件,在反复执行的时候就可以通过比较来排除这些已经下载过的文件。

实践

为了顺藤摸瓜,先用 Curl 取得BT页的首页:
curl -o tmp.txt http://bt.popgo.net/
要顺利找到欲下载的符合只定条件的项目,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 http://bt.popgo.net/allowed/!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 http://bt.popgo.net/
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 http://bt.popgo.net/allowed/!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 许可协议 进行许可


[ Last edited by ikari on 2006-8-2 at 13:41 ]



豆腐的简陋小屋
2006-8-2 13:38
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 2 楼』:  

今天下载论坛正好用上,学习!

好帖子不能沉了~~

2006-12-23 08:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 3 楼』:  

今天再次用了curl,很好很强大




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2007-8-18 23:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lotus516
高级用户

论坛上抢劫的


积分 551
发帖 246
注册 2006-9-21
状态 离线
『第 4 楼』:  

我要了!

2007-8-19 15:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 5 楼』:  

首先感谢楼主分享,其次希望大家不要怪我翻老帖子。

我现在的问题是,找种子什么的容易,问题是怎么判断.torrent文件现在有没有种子哪?

因为我这里的情况和楼主不同,我是要下载几个老片子,找了很多种子文件,都已经没有种子了。 我的问题是怎么判断一个种子文件的质量,也就是还有没有种子。



探讨批量下载与智能化的下载
2007-12-6 09:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tvzml
初级用户





积分 157
发帖 67
注册 2007-5-13
状态 离线
『第 6 楼』:  

本着学习的目的,参考了ikari楼主的文章,由于我是初学者关系,对FOR命令还没有熟练,借用了多个临时文件,才分析出种子的Hash值,原理其实很简单,先使用wget下载网页,再利用FOR语句分析,筛选出网站的Hash地址,再以WGET下载BT种子,再使用BitComet下载种子的电影,并且在download.txt作记录,防止重复下载。

::BitComet安装路径为默认C:\Program Files\BitComet
::下载保存路径为d:\downloads\
@echo off&setlocal ENABLEDELAYEDEXPANSION
set path=%path%;%cd%;%~dp0;C:\Program Files\BitComet
wget -w 3 -N http://bt.popgo.net/index.html
cd.>index1.txt
cd.>index2.txt
cd.>index3.txt
cd.>index4.txt
cd.>index5.txt
cd.>Hash.txt
for /f "delims=" %%i in ('findstr "href=" index.html') do echo %%i>>index1.txt
for /f "delims=" %%i in ('findstr "漫游字幕组" index1.txt') do echo %%i>>index2.txt
for /f "delims=" %%i in ('findstr "置顶" index2.txt') do echo %%i>>index3.txt
for /f "tokens=8 delims==>" %%i in (index3.txt) do echo %%~i >>index4.txt
for /f "tokens=1* delims=_" %%a in (index4.txt) do echo %%b >>index5.txt
for /f "delims=." %%a in (index5.txt) do echo %%a>>Hash.txt
del index1.txt
del index2.txt
del index3.txt
del index4.txt
del index5.txt
for /f "delims=" %%i in (Hash.txt) do (
set flag=1
for /f "delims=" %%j in (download.txt) do if %%i==%%j set flag=0
if !flag!==1 (
wget -w 2 -N http://bt.popgo.net/down/down.php?hash=%%i
echo %%i>>download.txt
start BitComet.exe /s /tray %%i.torrent /o d:\downloads\
)
)
)
endlocal



::请前辈帮我优化下,特别是FOR这里可以省略几句的,希望得到高人的指点。

[ Last edited by tvzml on 2008-4-14 at 05:26 AM ]

2008-4-14 05:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: