|
#!/usr/bin/perl # # asciitube -- given a youtube url, play it in the current terminal # # 2008 - David Bushong <david@bushong.net> # use strict; use warnings; use CGI '-oldstyle_urls'; use JSON; use LWP::UserAgent; use Getopt::Std; my %opt; getopts('hc', \%opt); die <<EOF if @ARGV != 1 && $ARGV[0] !~ m{^http://www\.youtube\.com/} || $opt{h}; usage: $0 [-c] http://www.youtube.com/... -c: color (use cacalib instead of aalib) EOF my $url = $ARGV[0]; my $ua = LWP::UserAgent->new(max_redirect => 0); my $res = $ua->get($url); die $res->status_line unless $res->is_success; my $html = $res->content; die "failed to find swfArgs\n" unless $html =~ /swfArgs = (\{[^}]+\})/; my $json = $1; my $args = eval { jsonToObj($json) } || die "couldn't parse json: $json\n"; my $url2 = 'http://www.youtube.com/get_video?' . CGI->new({ video_id => $args->{video_id}, t => $args->{t}, use_get_video_info => 1, load_modules => 1, })->query_string; $res = $ua->get($url2); die "failed to get 303\n" unless $res->code eq '303'; my $flv_url = $res->header('Location') || die "couldn't find Location header\n"; delete $ENV{DISPLAY}; my $out = $opt{c} ? 'caca' : 'aa'; exec('mplayer', '-quiet', '-vo', $out, $flv_url); |