BuzzSongs に FLV ファイルのダウンロード機能を追加 の方法で YouTube の動画 FLV ファイルがダウンロードできなくなっていた(YouTube内部の仕様変更)ので、YouTube の動画をダウンロードするためのURLを取得する Java コード とか google videoやyoutubeとかの動画を落として保存。 のやりかたを踏襲して、ダウンロード機能を修正した。
ついでに BuzzTube のほうも同様に修正。
⇒ BuzzTube
あと、以下のページが参考になった。
色々探した結果、下記の様に origin=youtube.com (cache のある domain) を query_string に追加すれば良い様だ。
http://cache.googlevideo.com/get_video?video_id=_u-iru8OmkM&origin=youtube.com
※cache のある domain で無い場合は flie が存在しない事になります。
完全な解決では無い、これからどうするか!?
(中略)
CPAN の WWW::YouTube::VideoURI を使う事で解決。
YouTube の flv の取得 - TeahousePhantomProgramDiary
WWW::YouTube::VideoURI - a module to determine the URI of a Flash Video file on YouTube.com - search.cpan.org のソースコード(get_video_uri サブルーチン)も参考になる。
sub get_video_uri {
my ($self, $uri_s) = @_;
my $uri = URI->new($uri_s);
my %params = $uri->query_form;
croak("Malformed URL or missing parameter") if ($params{v} eq '');
my $new_uri = sprintf(
'http://www.youtube.com/v/%s',
uri_escape($params{v})
);
my $req = GET($new_uri);
my $res = $self->{ua}->request($req);
croak($res->status_line) if ($res->is_error);
my $target = URI->new_abs($res->header('Location'), $new_uri);
my %target_params = $target->query_form;
return sprintf(
'http://www.youtube.com/get_video.php?video_id=%s&t=%s',
uri_escape($params{v}),
uri_escape($target_params{t})
);
}
tags: zlashdot Movie BuzzSongs BuzzTube YouTube
Posted by NI-Lab. (@nilab)