- 現在市面有很多youtube的Download軟體,本來以為只要打開網頁原始檔就可以看到連結位置,可能是我想法太天真了..呵呵.這裡就拿別人已經寫好的code 當例子講解一下要如何download. 程式碼跟原理主要參考 Ref: http://www.catonmat.net/blog/downloading-youtube-videos-with-a-perl-one-liner/
- 其實主要還是透過封包分析出規則,首先youtube會建立個mirror的網址這個是我們一般所看到的http://www.youtube.com/後面接的是影片的資訊,如下http://www.youtube.com/watch?v=5f-MYl-HzNw&feature 我們點入後,他會定義好要回傳給Server所要的值,如width="425" height="350"...還有影片的檔名. Server的位置在http://youtube.com/get_video?video_id=$_&t=$t, 很明顯可以看到影片所存在的位置,透過 Wget or WWW::Mechanize 的方式把影片抓回到 local
- sample code from http://www.catonmat.net/blog/downloading-youtube-videos-with-a-perl-one-liner/
use WWW::Mechanize; use Number::Bytes::Human qw(format_bytes); for (@ARGV) { s{http://www\.youtube\.com/watch\?v=}{}g; $m = WWW::Mechanize->new; $m->get("http://www.youtube.com/watch?v=$_&gl=US&hl=en"); ($t) = $m->content =~ /, "t": "([^"]+)"/; open $f, "> $_.flv"; binmode $f; $m->get( "http://youtube.com/get_video?video_id=$_&t=$t", ':content_cb' => sub { ($c, $r) = @_; $b += length($c); if ($r->content_length) { printf STDERR "$_: %.2f%%: %s of %s \r", 100. * $b / $r->content_length, format_bytes($b), format_bytes($r->content_length); } print $f $c; }); $b = 0; print "\n"; close $f; }
4.執行結果,在console下鍵入 %perl youtub.pl http://www.youtube.com/watch?v=5f-MYl-HzNw&feature=fvsr 下載完後請用 KMPlayer來撥放.
沒有留言:
張貼留言