top | item 10007940

(no title)

101914 | 10 years ago

I wrote my own. I can change it faster when YouTube changes something than waiting for someone else. YouTube makes downloading very straightforward. No need for Perl, Python or any interpreter except sh.

  # requirements:
  # sh, sed (BSD ok), tr, openssl, ftp or some other httpclient

  curl=ftp 
  file=${2-1.mp4} # default outfile

  # itag #s are on the wikipedia page for youtube

  case $# in
  [12])
  {
  sed 's/http:/https:/' \
  |while read a;
  do

  b=${a#*://}; 
  c=${b%%/*}; 
  {
  printf "%b" "GET /${a#https://*/} HTTP/1.0\r\n";
  printf "Host: $c\r\n";
  printf "User-Agent: OK, Google.\r\n";
  printf "Connection: close\r\n\r\n";
  } \
  |openssl s_client -ign_eof -connect $c:443 -verify 9 
  done \
  |sed '
  s,http,\
  &,g;
  ' \
  |sed '
  /%3A%2F/!d;
  /videoplayback/!d; 
  s,%3D,=,g;
  s,%3A,:,g;
  s,%2F,/,g;
  s,%3F,?,g;
  s/^M//g;
  ' \
  |sed -e '
  s/&itag=5//;t1
  s/&itag=1[78]//;t1
  s/&itag=22//;t1
  s/&itag=3[4-8]//;t1
  s/&itag=4[3-6]//;t1
  s/&itag=1[346][0-9]//;t1
  ' -e :1 \
  |sed '
  s,%26,\
  ,g;
  s,&,\
  ,g;
  ' \
  |sed 's/%25/%/g' \
  |tr '\012' '&' \
  |sed 's/&$//'; 
  echo 
  } \
  |sed '
  s,%3D,=,g;
  s,%3A,:,g;
  s,%2F,/,g;
  s,%3F,?,g;
  s/^M//g;
  ' \
  |sed '
  s/&https/\
  \
  https/g;' \
  |sed 's/\\u0026.*//' \
  |sed '/itag='"${1-.}"'/!d;'|{ 
  read a;
  exec $curl -4o $file $a;}
  ;;
  *)
  exec echo \
  "usage:   $0 itagno [outfile]
  outfile: $file"
  esac

discuss

order

No comments yet.