mirror of https://github.com/calzoneman/sync.git
Support YouTube Playlists
This commit is contained in:
parent
e70002ae4f
commit
141bb69777
32
channel.js
32
channel.js
|
@ -467,6 +467,38 @@ Channel.prototype.enqueue = function(data) {
|
||||||
}})(this, data.id);
|
}})(this, data.id);
|
||||||
InfoGetter.getYTInfo(data.id, callback);
|
InfoGetter.getYTInfo(data.id, callback);
|
||||||
}
|
}
|
||||||
|
// YouTube Playlist
|
||||||
|
else if(data.type == "yp") {
|
||||||
|
var callback = (function(chan, id) { return function(res, data) {
|
||||||
|
if(res != 200) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
for(var i = 0; i < data.feed.entry.length; i++) {
|
||||||
|
var item = data.feed.entry[i];
|
||||||
|
var title = item.title.$t;
|
||||||
|
var url = item.link[1].href;
|
||||||
|
var parts = url.split("/");
|
||||||
|
var id = parts[parts.length - 1];
|
||||||
|
var seconds = item.media$group.yt$duration.seconds;
|
||||||
|
var vid = new Media(id, title, seconds, "yt");
|
||||||
|
chan.queue.splice(idx, 0, vid);
|
||||||
|
chan.sendAll("queue", {
|
||||||
|
media: vid.pack(),
|
||||||
|
pos: idx
|
||||||
|
});
|
||||||
|
chan.addToLibrary(vid);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
console.log("YTPlaylist Failed: id=", id);
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
}})(this, data.id);
|
||||||
|
InfoGetter.getYTPlaylist(data.id, callback);
|
||||||
|
}
|
||||||
// Set up twitch metadata
|
// Set up twitch metadata
|
||||||
else if(data.type == "tw") {
|
else if(data.type == "tw") {
|
||||||
var media = new Media(data.id, "Twitch ~ " + data.id, 0, "tw");
|
var media = new Media(data.id, "Twitch ~ " + data.id, 0, "tw");
|
||||||
|
|
10
get-info.js
10
get-info.js
|
@ -71,6 +71,16 @@ exports.getYTInfo = function(id, callback) {
|
||||||
timeout: 1000}, callback);
|
timeout: 1000}, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.getYTPlaylist = function(id, callback) {
|
||||||
|
getJSON({
|
||||||
|
host: "gdata.youtube.com",
|
||||||
|
port: 80,
|
||||||
|
path: "/feeds/api/playlists/" + id + "?v=2&alt=json",
|
||||||
|
method: "GET",
|
||||||
|
dataType: "jsonp",
|
||||||
|
timeout: 1000}, callback);
|
||||||
|
}
|
||||||
|
|
||||||
// Look up Soundcloud metadata
|
// Look up Soundcloud metadata
|
||||||
// Whoever designed this should rethink it. I"ll submit a feedback
|
// Whoever designed this should rethink it. I"ll submit a feedback
|
||||||
// form on their website.
|
// form on their website.
|
||||||
|
|
|
@ -449,8 +449,12 @@ function removeCurrentPlayer(){
|
||||||
function parseVideoURL(url){
|
function parseVideoURL(url){
|
||||||
if(typeof(url) != "string")
|
if(typeof(url) != "string")
|
||||||
return null;
|
return null;
|
||||||
if(url.indexOf("youtu.be") != -1 || url.indexOf("youtube.com") != -1)
|
if(url.indexOf("youtu.be") != -1 || url.indexOf("youtube.com") != -1) {
|
||||||
|
if(url.indexOf("playlist") != -1) {
|
||||||
|
return [parseYTPlaylist(url), "yp"];
|
||||||
|
}
|
||||||
return [parseYTURL(url), "yt"];
|
return [parseYTURL(url), "yt"];
|
||||||
|
}
|
||||||
else if(url.indexOf("twitch.tv") != -1)
|
else if(url.indexOf("twitch.tv") != -1)
|
||||||
return [parseTwitch(url), "tw"];
|
return [parseTwitch(url), "tw"];
|
||||||
else if(url.indexOf("livestream.com") != -1)
|
else if(url.indexOf("livestream.com") != -1)
|
||||||
|
@ -467,12 +471,12 @@ function parseYTURL(url) {
|
||||||
url = url.replace("feature=player_embedded&", "");
|
url = url.replace("feature=player_embedded&", "");
|
||||||
if(url.indexOf("&list=") != -1)
|
if(url.indexOf("&list=") != -1)
|
||||||
url = url.substring(0, url.indexOf("&list="));
|
url = url.substring(0, url.indexOf("&list="));
|
||||||
var m = url.match(/youtube\.com\/watch\\?v=([^&]*)/);
|
var m = url.match(/youtube\.com\/watch\?v=([^&]+)/);
|
||||||
if(m) {
|
if(m) {
|
||||||
// Extract ID
|
// Extract ID
|
||||||
return m[1];
|
return m[1];
|
||||||
}
|
}
|
||||||
var m = url.match(/youtu\.be\/([^&]*)/);
|
var m = url.match(/youtu\.be\/([^&]+)/);
|
||||||
if(m) {
|
if(m) {
|
||||||
// Extract ID
|
// Extract ID
|
||||||
return m[1];
|
return m[1];
|
||||||
|
@ -486,8 +490,16 @@ function parseYTURL(url) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseYTPlaylist(url) {
|
||||||
|
var m = url.match(/youtube\.com\/playlist\?list=([^&]+)/);
|
||||||
|
if(m) {
|
||||||
|
return m[1];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function parseTwitch(url) {
|
function parseTwitch(url) {
|
||||||
var m = url.match(/twitch\.tv\/([a-zA-Z0-9]*)/);
|
var m = url.match(/twitch\.tv\/([a-zA-Z0-9]+)/);
|
||||||
if(m) {
|
if(m) {
|
||||||
// Extract channel name
|
// Extract channel name
|
||||||
return m[1];
|
return m[1];
|
||||||
|
@ -496,7 +508,7 @@ function parseTwitch(url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseLivestream(url) {
|
function parseLivestream(url) {
|
||||||
var m = url.match(/livestream\.com\/([a-zA-Z0-9]*)/);
|
var m = url.match(/livestream\.com\/([a-zA-Z0-9]+)/);
|
||||||
if(m) {
|
if(m) {
|
||||||
// Extract channel name
|
// Extract channel name
|
||||||
return m[1];
|
return m[1];
|
||||||
|
|
Loading…
Reference in New Issue