在《大耳朵英语》的播客上,批量下载MP3

    上回我写过了一篇文章,在《大耳朵英语》的播客上,批量获取MP3地址。后来发现将这些MP3地址

导入迅雷批量下载都会失败,后来调试了一下程序发现,原来是因为大耳朵英语网站上下载MP3是有用户

鉴权的,而且有cookies校验。

所以这次决定再写一段程序,实现下载功能。

#!/use/bin/perl -w

use strict;
use warnings;
use HTTP::Cookies;
use LWP::UserAgent;
use Data::Dumper;

my $login_url = 'http://www.ebigear.com/?module=member&act=login';

my $username = 'acefei';
my $passwd = 'Ebe!123';

my %login_form = (
        MemberName => $username,
        Pwd => $passwd,
);

my $ie = LWP::UserAgent->new;
# 获得COOKIE
my $response = $ie->get($login_url);
my $cookie;
my $cookie_jar;
my @cookies;

if ( $response->is_success ) {
    $cookie_jar = HTTP::Cookies->new(file =>"cookies", autosave => 1, ignore_discard => 1);
}

# 登录
$ie->default_header('Referer'=>$login_url);
$ie->cookie_jar($cookie_jar);
$response = $ie->post( $login_url, \%login_form);

if ( $response->as_string =~ /bigear_name=$username/) {
        print "login successful!\n";
}
else {
        print "login error!\n";
}

# 登录成功后页面请求
$ie->cookie_jar($cookie_jar); #此时的$cookie_jar已经发生更新了
$response =
$ie->get('http://www.ebigear.com/?module=resource&act=getdownurl&method=http&md5Code=%2Foral%2Fpc%2F2012%2F01%2F18%2F1326842908_3065994.mp3',
':content_file' => 'faith.mp3'
);

#如果使用$ie->request来获取网页,保存成文件,可以写成
#$ie->request(GET($url), 'faith.mp3');

#这里不推荐用以下方式来保存MP3,
#因为最后生成的文件效果不好,
#还有些格式出错,不能播放
#open my $fh, '>', 'faith.mp3';
#print $fh $response->content; 
#close $fh;


$response =$ie->get('http://www.ebigear.com/?module=resource&act=getdownurl&method=http&md5Code=%2Foral%2Fpc%2F2012%2F01%2F18%2F1326842908_3065994.mp3',':content_file' => 'faith.mp3');这一行结合上一篇生成的MP3地址文件,可以在外面套一层循环读文件,来实现批量下载的功能。

 

 

 

你可能感兴趣的:(Cookies,File,jar,header,url,login)