YouTube からデータをぶっこ抜く方法

たいていの動画アプロダサイトって、HTMLソースを表示すれば、http://****.wav ってURLが記述されてるんだけど、YouTubeはちょっと一工夫が必要なので、それを自動化するrubyスクリプトを書いてみました。自己責任で使ってくださいな。

DLしたファイルは、VLC media playerというツールで見ることができます。

require("open-uri")

def get_id(url)
  if url =~ /v=(.*?)(?:&|$)/
    return $1
  end
  return ""
end

def get_link(url)
  id = url
  if url =~ /http:.*/
    id = get_id(url)
  end

  url = "http://www.youtube.com/watch?v=#{id}"

  open(url){|f|
    html = f.read
    if html =~ /\/player2\.swf\?video_id=.*?&t=(.*?)"/
      dl_url = "http://youtube.com/get_video.php?video_id=#{id}&t=#{$1}"
      return dl_url
    end
  }

  return ""
end


def get_file(url, file_name)
  if File.extname(file_name) != ".flv"
    file_name = file_name + ".flv"
  end

  dl_url = get_link(url)
  if dl_url == ""
    puts "--- not found this url #{url}"
    return
  end

  contents = open(dl_url){|f|
               f.read
             }

  f_out = open(file_name, "wb")
  f_out.write(contents)
  f_out.close()

end

#===============================================================================
# DLしたいYouTubeのURL
#===============================================================================
url = "http://www.youtube.com/watch?v=yPu19jOcJF4";
get_file(url, "CNN Cuts Early to President Bush")