From e56821962686217bf3e241ea6aa3ee34c635214e Mon Sep 17 00:00:00 2001 From: fuba Date: Fri, 3 Jul 2015 00:02:06 +0900 Subject: [PATCH 1/4] fetch_url should be able to read local file --- hls-fetch | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hls-fetch b/hls-fetch index 267fe1a..7ec59c1 100755 --- a/hls-fetch +++ b/hls-fetch @@ -24,6 +24,7 @@ use LWP::UserAgent; use JSON; use File::Temp qw(tempfile); use URI::URL; +use File::Slurp qw(read_file); use constant READ_SIZE => 1024; my %opt = ('bandwidth' => 'max'); @@ -250,11 +251,17 @@ sub parse_m3u_attribs { sub fetch_url { my ($url, $filename) = @_; - if (defined $filename) { + if ($url !~ /\Ahttps?\:\/\//) { + my @data = read_file($url); + return undef unless @data; + return join "", @data; + } + elsif (defined $filename) { my $response = $browser->get($url, ":content_file" => $filename); die $response->status_line(), "\n" if !$response->is_success; return undef; - } else { + } + else { my $response = $browser->get($url); die $response->status_line(), "\n" if !$response->is_success; return $response->decoded_content(); From c4738407fa507b6c645f50f1762870eccea45cb1 Mon Sep 17 00:00:00 2001 From: fuba Date: Fri, 3 Jul 2015 00:10:17 +0900 Subject: [PATCH 2/4] unnecessary modules must be lazy-loaded --- hls-fetch | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/hls-fetch b/hls-fetch index 7ec59c1..dd2e783 100755 --- a/hls-fetch +++ b/hls-fetch @@ -19,8 +19,6 @@ use strict; use Getopt::Long; -use HTML::Parser; -use LWP::UserAgent; use JSON; use File::Temp qw(tempfile); use URI::URL; @@ -70,8 +68,6 @@ if (!exists $opt{'output'}) { } my ($url) = @ARGV; -my $browser = LWP::UserAgent->new; -$browser->cookie_jar({}); my $video_file = $opt{'output'}; die "$video_file: file exists, not overwriting without -f/--force\n" if !$opt{'force'} && -e $video_file; @@ -79,6 +75,7 @@ open(my $video_fh, '>', $video_file) || die "$video_file: cannot open file: $!\n if ($opt{'svtplay'}) { my $data = eval { fetch_url($url) }; die "$url: cannot fetch page: $@" if $@; + require HTML::Parser; my $parser = HTML::Parser->new(api_version => 3, start_h => [\&handle_svtplay_tag, 'tagname,@attr']); my ($json_path, $json_title); @@ -108,6 +105,7 @@ if ($opt{'svtplay'}) { } elsif ($opt{'embedded'}) { my $data = eval { fetch_url($url) }; die "$url: cannot fetch page: $@" if $@; + require HTML::Parser; my $parser = HTML::Parser->new(api_version => 3, start_h => [\&handle_playlist_tag, 'tagname,@attr']); my $index_url; @@ -249,6 +247,7 @@ sub parse_m3u_attribs { return %attr; } +my $browser; sub fetch_url { my ($url, $filename) = @_; if ($url !~ /\Ahttps?\:\/\//) { @@ -256,14 +255,22 @@ sub fetch_url { return undef unless @data; return join "", @data; } - elsif (defined $filename) { - my $response = $browser->get($url, ":content_file" => $filename); - die $response->status_line(), "\n" if !$response->is_success; - return undef; - } - else { - my $response = $browser->get($url); - die $response->status_line(), "\n" if !$response->is_success; - return $response->decoded_content(); + else{ + if (!$browser) { + require LWP::UserAgent; + $browser = LWP::UserAgent->new; + $browser->cookie_jar({}); + } + + if (defined $filename) { + my $response = $browser->get($url, ":content_file" => $filename); + die $response->status_line(), "\n" if !$response->is_success; + return undef; + } + else { + my $response = $browser->get($url); + die $response->status_line(), "\n" if !$response->is_success; + return $response->decoded_content(); + } } } From e543d422eb189c7c1d4577bbfdf8a2ce8cf1b6dd Mon Sep 17 00:00:00 2001 From: fuba Date: Fri, 3 Jul 2015 00:17:00 +0900 Subject: [PATCH 3/4] JSON is not necessary --- hls-fetch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hls-fetch b/hls-fetch index dd2e783..07c2b50 100755 --- a/hls-fetch +++ b/hls-fetch @@ -19,7 +19,6 @@ use strict; use Getopt::Long; -use JSON; use File::Temp qw(tempfile); use URI::URL; use File::Slurp qw(read_file); @@ -74,8 +73,9 @@ die "$video_file: file exists, not overwriting without -f/--force\n" if !$opt{'f open(my $video_fh, '>', $video_file) || die "$video_file: cannot open file: $!\n"; if ($opt{'svtplay'}) { - my $data = eval { fetch_url($url) }; die "$url: cannot fetch page: $@" if $@; require HTML::Parser; + require JSON; + my $data = eval { fetch_url($url) }; die "$url: cannot fetch page: $@" if $@; my $parser = HTML::Parser->new(api_version => 3, start_h => [\&handle_svtplay_tag, 'tagname,@attr']); my ($json_path, $json_title); From bad0ac1abeddc7e4051b9de1f231fa7687b73b03 Mon Sep 17 00:00:00 2001 From: fuba Date: Fri, 3 Jul 2015 00:18:45 +0900 Subject: [PATCH 4/4] add cpanfile --- cpanfile | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpanfile diff --git a/cpanfile b/cpanfile new file mode 100644 index 0000000..52df93b --- /dev/null +++ b/cpanfile @@ -0,0 +1,4 @@ +requires 'JSON' => '0'; +requires 'URI::URL' => '0'; +requires 'LWP::UserAgent' => '0'; +requires 'HTML::Parser' => '0';