Now it works on more than one video. :P
$url =~ /v=([A-Za-z0-9_]+)/;
my $id = $1 || $url;
-my $xml = get("http://video.google.com/timedtext?hl=en&v=$id&type=track&name=&lang=en");
+my ($xml, $t, %langs, $lang_default, $name);
-unless (defined $xml) {
- print "Could not fetch subtitles for $id\n";
+print STDERR "Fetching subtitle list...";
+
+$xml = get("http://video.google.com/timedtext?hl=en&v=$id&type=list");
+
+if (defined $xml) {
+ print STDERR "OK\n";
+} else {
+ print STDERR "Failed\n";
+ exit 1;
+}
+
+$t = XML::Twig->new(
+ twig_roots => { 'track' => \&add_track }
+);
+
+$t->parse($xml);
+
+sub add_track {
+ my ($t, $elt) = @_;
+ $langs{$elt->att('lang_code')} = $elt->att('name');
+ if ($elt->att('lang_default') eq 'true') {
+ $lang_default = $elt->att('lang_code');
+ }
+}
+
+$name = $langs{$lang_default};
+
+print STDERR "Fetching subtitles... ";
+
+$xml = get("http://video.google.com/timedtext?hl=en&v=$id&type=track&name=$name&lang=en");
+
+if (defined $xml) {
+ print STDERR "OK\n";
+} else {
+ print STDERR "Failed\n";
exit 1;
}