perl调用curl下载m3u8

perl调用curl下载m3u8,特点:下载错误的检查,

 

use strict; use warnings;
#格式: prefix,file1,file2...
my $fn = $ARGV[0];
print "File=$fn\n"; 

sub slurp{
    # 一次性读取文件, 参数是文件名
    open(my $f, '<', shift);     my $c = '';     while (<$f>){    $c = $c.$_; }    close($f); return $c;
}

my $doc = slurp($fn);
my @tns = split(/,/, $doc);
my $prefix = shift(@tns);
my @names = ();
# 检查是否有后缀名
if (index($tns[0], '.ts') == -1){
    print "auto edit url\n";
    foreach my $tn (@tns){
        $tn =~ s/\&/A/g;
        $tn =~ s/\?/B/g;
        $tn =~ s/\=/C/g;
        $tn = $tn.'.ts';
        if (-e $tn) {} else { push(@names, $tn); }
    }
} else {
    foreach my $tn (@tns) {
        if (-e $tn) {} else { push(@names, $tn); }
    }
}

my $tm = time;

my @errs = ();
my $app = "curl.exe -L -k -A \"Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/72.0.3626.96\" ";
print "[0|0]\n";
for (my $j = 0; $j < scalar(@names); $j++){
    my $name = $names[$j];
    if (-e $name.".err"){
        unlink($name.".err");
        unlink($name);
    }
    my $cmd = $app." --stderr ".$name.".err -o ".$name.' "'.$prefix.'/'.$name.'"';
    system($cmd);
    
    if (-e $name.".err"){
        my $err = slurp($name.".err");
        if (index($err, 'curl:') > -1){
            #curl 下载错误
            push(@errs, $name);
            
            if (-e $name){
                unlink($name);
            }
        }
        unlink($name.".err");
        
    }
    if (time - $tm >= 150){
        print '['.$j.'|'.scalar(@errs)."]\n";
        $tm = time;
    }
    
}

print "\n";
if (scalar(@errs) > 0){
    print "Error:".join(',', @errs)."\n";
}
print 'FINISH';

 

posted @ 2022-05-01 16:54  licre666  阅读(162)  评论(0)    收藏  举报