-
Notifications
You must be signed in to change notification settings - Fork 88
/
youtube.js
72 lines (62 loc) · 1.94 KB
/
youtube.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/**
* Copyright 2015 IBM Corp. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var request = require('request');
var qs = require('querystring');
var jsdom = require('jsdom');
module.exports.getInternalUrl = function(params, callback) {
request(params.id, function(error, response, body) {
if (error || response.statusCode !== 200) {
callback(error);
return
}
var window = jsdom.jsdom(body).parentWindow;
var $ = require('jquery')(window);
var scripts = $('script');
var title = $('#eow-title').text();
var ytplayer;
// eslint-disable-next-line
var yt = {};
scripts.each(function() {
// eslint-disable-next-line
var text = $(this).text();
if (text.indexOf('ytplayer') !== -1) {
// eslint-disable-next-line
ytplayer = eval(text + 'ytplayer');
}
});
// eslint-disable-next-line
var internalUrl = null;
var sourcesString = ytplayer.config.args.url_encoded_fmt_stream_map.split(',');
var urls = [];
sourcesString.forEach(function(s) {
s = qs.parse(s);
urls.unshift({
// eslint-disable-next-line
url: '/api/video?id=' + qs.escape(s['url']),
quality: s.quality,
type: s.type
});
});
callback(null, {
urls: urls,
title: title
});
});
};
module.exports.getVideoChunk = function(url, req, res) {
req.pipe(request.get(url.id)).pipe(res);
};