mirror of https://github.com/calzoneman/sync.git
119 lines
3.2 KiB
JavaScript
119 lines
3.2 KiB
JavaScript
/**
|
|
* Copyright 2013 Calvin 'calzoneman' Montgomery
|
|
*
|
|
* Licensed under Creative Commons Attribution-NonCommercial 3.0
|
|
* See http://creativecommons.org/licenses/by-nc/3.0/
|
|
*
|
|
*/
|
|
|
|
var http = require('http');
|
|
var https = require('https');
|
|
|
|
// Helper function for making an HTTP request and getting the result
|
|
// as JSON
|
|
function getJSON(options, callback) {
|
|
var req = http.request(options, function(res){
|
|
var buffer = '';
|
|
res.setEncoding('utf8');
|
|
res.on('data', function (chunk) {
|
|
buffer += chunk;
|
|
});
|
|
res.on('end', function() {
|
|
try {
|
|
var data = JSON.parse(buffer);
|
|
}
|
|
catch(e) {
|
|
console.log("JSON fail: ", options);
|
|
return;
|
|
}
|
|
callback(res.statusCode, data);
|
|
});
|
|
});
|
|
|
|
req.end();
|
|
};
|
|
|
|
// Dailymotion uses HTTPS for anonymous requests... [](/picard)
|
|
function getJSONHTTPS(options, callback) {
|
|
var req = https.request(options, function(res){
|
|
var buffer = '';
|
|
res.setEncoding('utf8');
|
|
res.on('data', function (chunk) {
|
|
buffer += chunk;
|
|
});
|
|
res.on('end', function() {
|
|
try {
|
|
var data = JSON.parse(buffer);
|
|
}
|
|
catch(e) {
|
|
console.log("JSON fail: ", options);
|
|
return;
|
|
}
|
|
callback(res.statusCode, data);
|
|
});
|
|
});
|
|
|
|
req.end();
|
|
};
|
|
|
|
// Look up YouTube metadata
|
|
// Fairly straightforward
|
|
exports.getYTInfo = function(id, callback) {
|
|
getJSON({
|
|
host: "gdata.youtube.com",
|
|
port: 80,
|
|
path: "/feeds/api/videos/" + id + "?v=2&alt=json",
|
|
method: "GET",
|
|
dataType: "jsonp",
|
|
timeout: 1000}, callback);
|
|
}
|
|
|
|
// Look up Soundcloud metadata
|
|
// Whoever designed this should rethink it. I'll submit a feedback
|
|
// form on their website.
|
|
exports.getSCInfo = function(url, callback) {
|
|
const SC_CLIENT = '2e0c82ab5a020f3a7509318146128abd';
|
|
// SoundCloud is dumb
|
|
// I have to request the API URL for the given input URL
|
|
// Because the sound ID isn't in the URL
|
|
getJSON({
|
|
host: "api.soundcloud.com",
|
|
port: 80,
|
|
path: "/resolve.json?url="+url+"&client_id=" + SC_CLIENT,
|
|
method: "GET",
|
|
dataType: "jsonp",
|
|
timeout: 1000}, function(status, data) {
|
|
// This time we can ACTUALLY get the data we want
|
|
getJSON({
|
|
host: "api.soundcloud.com",
|
|
port: 80,
|
|
path: data.location,
|
|
method: "GET",
|
|
dataType: "jsonp",
|
|
timeout: 1000}, callback);
|
|
});
|
|
}
|
|
|
|
// Look up Vimeo metadata. Fairly straightforward
|
|
exports.getVIInfo = function(id, callback) {
|
|
getJSON({
|
|
host: "vimeo.com",
|
|
port: 80,
|
|
path: "/api/v2/video/" + id + ".json",
|
|
method: "GET",
|
|
dataType: "jsonp",
|
|
timeout: 1000}, callback);
|
|
}
|
|
|
|
// Look up Dailymotion info
|
|
exports.getDMInfo = function(id, callback) {
|
|
var fields = "duration,title"
|
|
getJSONHTTPS({
|
|
host: "api.dailymotion.com",
|
|
port: 443,
|
|
path: "/video/" + id + "?fields=" + fields,
|
|
method: "GET",
|
|
dataType: "jsonp",
|
|
timeout: 1000}, callback);
|
|
}
|