Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial perl one-liner youtube downloader import

  • Loading branch information...
commit 8723c9ab8621533413357c63c57a5c590d75b006 0 parents
@pkrumins authored
Showing with 60 additions and 0 deletions.
  1. +60 −0 readme.txt
60 readme.txt
@@ -0,0 +1,60 @@
+This is a Perl one-liner that downloads YouTube videos. I wrote it for fun.
+
+It was written by Peteris Krumins (peter@catonmat.net).
+His blog is at http://www.catonmat.net -- good coders code, great reuse.
+
+The code is licensed under the MIT license.
+
+I explained every bit of it in my article "Downloading YouTube Videos with a
+Perl One-Liner". Read it here:
+
+http://www.catonmat.net/blog/downloading-youtube-videos-with-a-perl-one-liner/
+
+------------------------------------------------------------------------------
+
+Here it is:
+
+perl -MWWW::Mechanize -e '$m = WWW::Mechanize->new; $_=shift; ($i) = /v=(.+)/; s/%(..)/chr(hex($1))/ge for (($u) = $m->get($_)->content =~ /l_map": .+(?:%2C)?5%7C(.+?)"/); $m->get($u, ":content_file" => "$i.flv")'
+
+Use it as following:
+
+ $ perl ... <http://www.youtube.com/watch?v=ID>
+
+It will save the video to a file named "ID.flv".
+
+Here is how it works, statement by statement:
+
+------------------------------------.-----------------------------------------
+code | explanation
+------------------------------------+-----------------------------------------
+$m = WWW::Mechanize->new; | creates WWW::Mechanize object
+------------------------------------+-----------------------------------------
+$_=shift; | puts the command line argument in $_
+------------------------------------+-----------------------------------------
+($i) = /v=(.+)/; | extracts the video ID for later user for
+ | filename.
+------------------------------------+-----------------------------------------
+s/%(..)/chr(hex($1))/ge for (($u) = | this GETs the content of video page at
+$m->get($_)->content =~ | $_, then matches it against a regular
+/l_map": .+(?:%2C)?5%7C(.+?)"/); | expression and captures the video url
+ | for flv video (id 5). this is evaled in
+ | list context, therefore the capture goes
+ | into $u variable, which gets url
+ | unescaped by s/%(..)/chr(hex($1))/ge
+------------------------------------+-----------------------------------------
+$m->get($u, ":content_file" => | this GETs the video file that was in $u
+ "$i.flv") | variable and saves it to file "$i.flv"
+------------------------------------'-----------------------------------------
+
+That's it. :)
+
+------------------------------------------------------------------------------
+
+
+Happy downloading!
+
+
+Sincerely,
+Peteris Krumins
+http://www.catonmat.net
+
Please sign in to comment.
Something went wrong with that request. Please try again.