免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2991 | 回复: 1
打印 上一主题 下一主题

微软网络广播下载程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-07 19:50 |只看该作者 |倒序浏览
#  auto_mb_download.pl
#      written by vulgatecn@msn.com
#              2006.2.07
#  自动下载微软网络广播的东东
#
#  流程介绍
#  先访问 http://www.microsoft.com/china/technet/webcasts/download.mspx
#     获取下载列表
#  然后访问http://www.mswebcast.com.cn/technet/alogin.aspx
#      登陆后,获得session,
#  用session访问http://www.mswebcast.com.cn/technet/dload.aspx?id
#      获得实际下载地址
#   产生批处理文件,然后用wget下载
#
#  要求安装wget,并且在path指明wget的路径
#  执行批处理时,每个教学内容,会建立一个文件夹,该文件夹保存下载课程录像
#  程序中需要自己添加微软网络广播的帐号
#  使用方法
#   auto_mb_download.pl > download.bat
#   download.bat
#

require HTTP::Request;# load http module
require HTTP::Response;
require LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common;
use LWP::Simple;
use HTTP::Cookies
$|=1;
use Socket;
use Getopt::Std;
$host="www.mswebcast.com.cn";
$port=80;
$base_dir="d:\\mswebcast";
$account='';
$pass='';


$list_url="http://www.microsoft.com/china/technet/webcasts/download.mspx";
         
$login_url="http://www.mswebcast.com.cn/technet/alogin.aspx";

$ua = LWP::UserAgent->new;
$cookie='__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=dDwtMTY2ODcwMjM2O3Q8O2w8aTwwPjs%2BO2w8dDw7bDxpPDk%2BOz47bDx0PHA8O3A8bDxvbmNsaWNrOz47bDxyZXR1cm4gQ2hlY2t0aGlzbG9naW5hbG9naW4oKTs%2BPj47Oz47Pj47Pj47bDxCdXR0b24xOz4%2BdLCLxKcmSbg6mKxAn8cpqxq7ENo%3D&View=zh-cn&charset=gb2312&qu=&TextBox1='.$account.'&Textbox2='.$pass.'&Button1.x=24&Button1.y=8';
$req0 =
"POST /technet/alogin.aspx?id=down&tid=msft011306vxpm HTTP/1.1\n".
"Host: www.mswebcast.com.cn\n".
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1\n".
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n".
"Accept-Language: en-us,en;q=0.5\n".
"Accept-Encoding: gzip,deflate\n".
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n".
"Keep-Alive: 300\n".
"Connection: keep-alive\n".
"Referer: http://www.mswebcast.com.cn/tech ... ;tid=msft011306vxpm\n".
"Content-Type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($cookie)."\n\n".

$cookie."HTTP/1.1 302 Found";

print "\n";

@tts=sendraw($req0);
$content=@tts;
foreach(@tts){
        $content=$content.$_;
}
$content=~/(ASP.NET_SessionId=.+);/;
$cookie=$1;
#print "Get cookie $cookie \n";

####################################
#
#   ËùÓÐÐèÒªÏÂÔØµÄÁбí,ÏÂÔØ±àºÅºÍÄÚÈÝÃû³Æ
#
####################################

my $req = HTTP::Request->new('GET' => $list_url);
my $res = $ua->request($req);
$content=$res->as_string;  

#$filter='href="http://www.mswebcast.com.cn/technet/alogin.aspx?id=down&tid=(*.)" target="_blank">(.*)</a>';
#" target="_blank">

#·&Ouml;&cedil;&icirc;
@con_list = split(/tid=/, $content);
foreach (@con_list) {
        if($_=~/([^".]+).+_blank">([^\/.]+)<\/a>/){
                $file_url=$1;
                #print $file_url."\n";
                $name=$2;
                #&sup3;&yacute;&Egrave;&yen;&para;à&Oacute;à&micro;&Auml;&iquest;&Otilde;&cedil;&ntilde;;
                $name=~s/^\s+//;
                $name=~s/\s+$//;
                #print $name."\n";
                #·&Aring;&Egrave;&euml;hash&Ouml;&ETH;
                $all_list{$file_url}=$name;

        }
}
while ( ($k,$v) = each %all_list ) {
    #print "$k => $v\n";
        $request = (POST   'http://www.mswebcast.com.cn/technet/dload.aspx?id='.$k,

                        Host  => 'www.mswebcast.com.cn',
                        cookie => $cookie,
                        Connection => 'Keep-Alive',
        );
        $response = $ua->request($request);
        $content=$response->content;
        $content=~m/(http:\/\/download.microsoft.com\/.+zip)">http/;
        $file_url=$1;
        print "mkdir \"$base_dir\\$v\"\n";
        print "wget $file_url -O \"$base_dir\\$v\\$k.zip\"\n";

}






#&ordm;&Uuml;&Ocirc;&shy;&Ecirc;&frac14;&micro;&Auml;·&cent;&Euml;&Iacute;quest&sup3;&Igrave;&ETH;ò
sub sendraw {
    my ($req) = @_;
    my $target;

    $target = inet_aton($host) || die("inet_aton problems\n");

    socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n");
    if(connect(S,pack "SnA4x8",2,$port,$target)){
        select(S);
                $| = 1;
        print $req;
            my @res = <S>;
        select(STDOUT);
                close(S);
        return @res;
    }
    else {
                die("Can't connect...\n");
    }
}

论坛徽章:
0
2 [报告]
发表于 2006-02-09 13:27 |只看该作者
强啊

我以前都是手工倒到flashget里面,然后晚上定时下载的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP