Do a second search without trailing brackets

This commit is contained in:
Jonathan Cremin 2014-12-05 14:13:47 +00:00
parent f7b1fcd53f
commit 8802ffe959
6 changed files with 113 additions and 39 deletions

View file

@ -71,19 +71,32 @@ module.exports.lookupId = function(id) {
module.exports.search = function(data) { module.exports.search = function(data) {
var deferred = Q.defer(); var deferred = Q.defer();
var query; var query, album;
var type = data.type; var type = data.type;
if (type == "album") { if (type == "album") {
query = data.artist.name + " " + data.name; query = data.artist.name + " " + data.name;
album = data.name;
} else if (type == "track") { } else if (type == "track") {
query = data.artist.name + " " + data.album.name + " " + data.name; query = data.artist.name + " " + data.album.name + " " + data.name;
album = data.album.name
} }
var path = "/search?q=" + encodeURIComponent(query) + "&type=" + type + "&client_id=" + credentials.key; var path = "/search?q=" + encodeURIComponent(query) + "&type=" + type + "&client_id=" + credentials.key;
request.get(apiRoot + path, function(res) { request.get(apiRoot + path, function(res) {
if (!res.body.data[0]) { if (!res.body.data[0]) {
deferred.resolve({service: "beats"}); var matches = album.match(/^[^\(\[]+/);
if (matches[0]) {
var cleanedData = JSON.parse(JSON.stringify(data));
if (type == "album") {
cleanedData.name = matches[0].trim();
} else if (type == "track") {
cleanedData.album = matches[0].trim();
}
module.exports.search(cleanedData).then(deferred.resolve);
} else {
deferred.resolve({service: "beats"});
}
} else { } else {
module.exports.lookupId(res.body.data[0].id).then(deferred.resolve); module.exports.lookupId(res.body.data[0].id).then(deferred.resolve);
} }

View file

@ -58,19 +58,32 @@ module.exports.lookupId = function(id, type) {
module.exports.search = function(data, next) { module.exports.search = function(data, next) {
var deferred = Q.defer(); var deferred = Q.defer();
var query; var query, album;
var type = data.type; var type = data.type;
if (type == "album") { if (type == "album") {
query = data.artist.name + " " + data.name; query = data.artist.name + " " + data.name;
album = data.name;
} else if (type == "track") { } else if (type == "track") {
query = data.artist.name + " " + data.album.name + " " + data.name; query = data.artist.name + " " + data.album.name + " " + data.name;
album = data.album.name;
} }
var path = "/search/" + type + "?q=" + encodeURIComponent(query); var path = "/search/" + type + "?q=" + encodeURIComponent(query);
request.get(apiRoot + path, function(res) { request.get(apiRoot + path, function(res) {
if (!res.body.data[0]) { if (!res.body.data[0]) {
deferred.resolve({service: "deezer"}); var matches = album.match(/^[^\(\[]+/);
if (matches[0]) {
var cleanedData = JSON.parse(JSON.stringify(data));
if (type == "album") {
cleanedData.name = matches[0].trim();
} else if (type == "track") {
cleanedData.album = matches[0].trim();
}
module.exports.search(cleanedData).then(deferred.resolve);
} else {
deferred.resolve({service: "deezer"});
}
} else { } else {
module.exports.lookupId(res.body.data[0].id, type).then(deferred.resolve); module.exports.lookupId(res.body.data[0].id, type).then(deferred.resolve);
} }

View file

@ -65,8 +65,10 @@ module.exports.search = function(data) {
if (type == "album") { if (type == "album") {
query = data.artist.name + " " + data.name; query = data.artist.name + " " + data.name;
album = data.name;
} else if (type == "track") { } else if (type == "track") {
query = data.artist.name + " " + data.album.name + " " + data.name; query = data.artist.name + " " + data.album.name + " " + data.name;
album = data.album.name;
} }
pm.search(query, 5, function(data) { pm.search(query, 5, function(data) {
@ -80,18 +82,29 @@ module.exports.search = function(data) {
return a.score < b.score; return a.score < b.score;
}).shift(); }).shift();
if (!result.album && !result.track) { if (!result) {
deferred.resolve({service:"googleplaymusic"}); var matches = album.match(/^[^\(\[]+/);
} if (matches[0]) {
var cleanedData = JSON.parse(JSON.stringify(data));
if (type == "album") {
cleanedData.name = matches[0].trim();
} else if (type == "track") {
cleanedData.album = matches[0].trim();
}
module.exports.search(cleanedData).then(deferred.resolve);
} else {
deferred.resolve({service: "googleplaymusic"});
}
} else {
var id;
if (type == "album") {
id = result.album.albumId;
} else if (type == "track") {
id = result.track.nid;
}
var id; module.exports.lookupId(id, type).then(deferred.resolve);
if (type == "album") {
id = result.album.albumId;
} else if (type == "track") {
id = result.track.nid;
} }
module.exports.lookupId(id, type).then(deferred.resolve);
}); });
return deferred.promise; return deferred.promise;
} }

View file

@ -51,15 +51,16 @@ module.exports.lookupId = function(id, type) {
module.exports.search = function(data) { module.exports.search = function(data) {
var deferred = Q.defer(); var deferred = Q.defer();
var query = ""; var query, album, entity;
var entity = "";
var type = data.type; var type = data.type;
if (type == "album") { if (type == "album") {
query = data.artist.name + " " + data.name; query = data.artist.name + " " + data.name;
album = data.name;
entity = "album"; entity = "album";
} else if (type == "track") { } else if (type == "track") {
query = data.artist.name + " " + data.album.name + " " + data.name; query = data.artist.name + " " + data.album.name + " " + data.name;
album = data.album.name;
entity = "musicTrack"; entity = "musicTrack";
} }
@ -68,7 +69,18 @@ module.exports.search = function(data) {
var data = JSON.parse(res.text); var data = JSON.parse(res.text);
if (!data.results[0]) { if (!data.results[0]) {
deferred.resolve({service: "itunes"}); var matches = album.match(/^[^\(\[]+/);
if (matches[0]) {
var cleanedData = JSON.parse(JSON.stringify(data));
if (type == "album") {
cleanedData.name = matches[0].trim();
} else if (type == "track") {
cleanedData.album = matches[0].trim();
}
module.exports.search(cleanedData).then(deferred.resolve);
} else {
deferred.resolve({service: "itunes"});
}
} else { } else {
var result = data.results[0]; var result = data.results[0];

View file

@ -115,22 +115,34 @@ module.exports.search = function(data) {
}).shift(); }).shift();
if (!result) { if (!result) {
return deferred.resolve({service: "rdio"}); var matches = album.match(/^[^\(\[]+/);
} if (matches[0]) {
var parsed = parse(result.shortUrl) var cleanedData = JSON.parse(JSON.stringify(data));
var id = parsed.path.replace("/x/", "").replace("/", ""); if (type == "album") {
deferred.resolve({ cleanedData.name = matches[0].trim();
service: "rdio", } else if (type == "track") {
type: type, cleanedData.album = matches[0].trim();
id: id, }
name: result.name, module.exports.search(cleanedData).then(deferred.resolve);
streamUrl: result.shortUrl, } else {
purchaseUrl: null, deferred.resolve({service: "rdio"});
artwork: result.icon.replace("http:", "").replace("square-200", "square-250"),
artist: {
name: result.artist
} }
}); } else {
var parsed = parse(result.shortUrl)
var id = parsed.path.replace("/x/", "").replace("/", "");
deferred.resolve({
service: "rdio",
type: type,
id: id,
name: result.name,
streamUrl: result.shortUrl,
purchaseUrl: null,
artwork: result.icon.replace("http:", "").replace("square-200", "square-250"),
artist: {
name: result.artist
}
});
}
}); });
return deferred.promise; return deferred.promise;
}; };

View file

@ -56,29 +56,40 @@ module.exports.lookupId = function(id, type) {
module.exports.search = function(data) { module.exports.search = function(data) {
var deferred = Q.defer(); var deferred = Q.defer();
var query = ""; var query, album;
var type = data.type; var type = data.type;
if (type == "album") { if (type == "album") {
query = "artist:" + data.artist.name.replace(":", "") + " album:" + data.name.replace(":", ""); query = "artist:" + data.artist.name.replace(":", "") + " album:" + data.name.replace(":", "");
album = data.name;
} else if (type == "track") { } else if (type == "track") {
query = "artist:" + data.artist.name.replace(":", "") + " album:" + data.album.name.replace(":", "") + " track:" + data.name.replace(":", ""); query = "artist:" + data.artist.name.replace(":", "") + " album:" + data.album.name.replace(":", "") + " track:" + data.name.replace(":", "");
album = data.album.name;
} }
spotify.search({query: query, type: type}, function(err, data) { spotify.search({query: query, type: type}, function(err, data) {
if ( err ) { if ( err ) {
console.log('Error occurred: ' + err); deferred.resolve({service: "spotify"});
return; return;
} }
if (!data[type + "s"].items[0]) { if (!data[type + "s"].items[0]) {
deferred.resolve({service:"spotify"}); var matches = album.match(/^[^\(\[]+/);
return; if (matches[0]) {
var cleanedData = JSON.parse(JSON.stringify(data));
if (type == "album") {
cleanedData.name = matches[0].trim();
} else if (type == "track") {
cleanedData.album = matches[0].trim();
}
module.exports.search(cleanedData).then(deferred.resolve);
} else {
deferred.resolve({service: "spotify"});
}
} else {
module.exports.lookupId(data[type + "s"].items[0].id, type).then(deferred.resolve);
} }
var item = data[type + "s"].items[0];
module.exports.lookupId(item.id, type).then(deferred.resolve);
}); });
return deferred.promise; return deferred.promise;
} }