Skip to content

Instantly share code, notes, and snippets.

@rachhen
Forked from max-te/youtube.js
Created November 11, 2020 17:36
Show Gist options
  • Select an option

  • Save rachhen/ddb09457d99bfbc52097b859fbcc1ec5 to your computer and use it in GitHub Desktop.

Select an option

Save rachhen/ddb09457d99bfbc52097b859fbcc1ec5 to your computer and use it in GitHub Desktop.
Download Youtube-Video in node.js
var http = require('http')
var fs = require('fs')
http.get("http://www.youtube.com/get_video_info?video_id=F_CvDj8pLo0", function(res) {
//console.log("Got response: " + res.statusCode);
var chunks = []
res.on('data', function(chunk){chunks.push(chunk)
}).on('end', function(){
var data = Buffer.concat(chunks).toString()
var videoInfo = parseVideoInfo(data)
downloadVideo(videoInfo)
})
}).on('error', function(e) {
console.log("Got error: " + e.message)
});
function parseVideoInfo(videoInfo) {
var rxUrlMap = /url_encoded_fmt_stream_map=([\]\[!"#$%'()*+,.\/:;<=>?@\^_`{|}~-\w]*)/
urlmap = unescape(videoInfo.match(rxUrlMap)[1])
//console.log(urlmap);
var rxUrlG = /url=([\]\[!"#$%'()*+,.\/:;<=>?@\^_`{|}~-\w]*)/g
var rxUrl = /url=([\]\[!"#$%'()*+,.\/:;<=>?@\^_`{|}~-\w]*)/
urls = urlmap.match(rxUrlG)
urls = map(urls, function(s) {return s.match(rxUrl)[1]} )
urls = map(urls, unescape)
//console.log(urls[0])
return { title:"test", urls: urls }
}
function downloadVideo(videoInfo) {
var url = videoInfo.urls[0];
var filename = videoInfo.title + ".flv"
http.get(url,
function(res) {
var stream = fs.createWriteStream(filename)
res.pipe(stream)
})
console.log("Downloading to "+filename);
}
function map (a,f) {
for(i=0;i<a.length;i++){
a[i]= f(a[i])
}
return a
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment