diff --git a/lib/services/beats.js b/lib/services/beats.js index 80e8066..7fffaaa 100644 --- a/lib/services/beats.js +++ b/lib/services/beats.js @@ -71,19 +71,32 @@ module.exports.lookupId = function(id) { module.exports.search = function(data) { var deferred = Q.defer(); - var query; + var query, album; var type = data.type; if (type == "album") { query = data.artist.name + " " + data.name; + album = data.name; } else if (type == "track") { 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; request.get(apiRoot + path, function(res) { 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 { module.exports.lookupId(res.body.data[0].id).then(deferred.resolve); } diff --git a/lib/services/deezer.js b/lib/services/deezer.js index 5a8a038..6ddb795 100644 --- a/lib/services/deezer.js +++ b/lib/services/deezer.js @@ -58,19 +58,32 @@ module.exports.lookupId = function(id, type) { module.exports.search = function(data, next) { var deferred = Q.defer(); - var query; + var query, album; var type = data.type; if (type == "album") { query = data.artist.name + " " + data.name; + album = data.name; } else if (type == "track") { query = data.artist.name + " " + data.album.name + " " + data.name; + album = data.album.name; } var path = "/search/" + type + "?q=" + encodeURIComponent(query); request.get(apiRoot + path, function(res) { 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 { module.exports.lookupId(res.body.data[0].id, type).then(deferred.resolve); } diff --git a/lib/services/googleplaymusic.js b/lib/services/googleplaymusic.js index d0550a1..733f67e 100644 --- a/lib/services/googleplaymusic.js +++ b/lib/services/googleplaymusic.js @@ -65,8 +65,10 @@ module.exports.search = function(data) { if (type == "album") { query = data.artist.name + " " + data.name; + album = data.name; } else if (type == "track") { query = data.artist.name + " " + data.album.name + " " + data.name; + album = data.album.name; } pm.search(query, 5, function(data) { @@ -80,18 +82,29 @@ module.exports.search = function(data) { return a.score < b.score; }).shift(); - if (!result.album && !result.track) { - deferred.resolve({service:"googleplaymusic"}); - } + if (!result) { + 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; - if (type == "album") { - id = result.album.albumId; - } else if (type == "track") { - id = result.track.nid; + module.exports.lookupId(id, type).then(deferred.resolve); } - - module.exports.lookupId(id, type).then(deferred.resolve); }); return deferred.promise; } diff --git a/lib/services/itunes.js b/lib/services/itunes.js index 38b215c..c0e84e2 100644 --- a/lib/services/itunes.js +++ b/lib/services/itunes.js @@ -51,15 +51,16 @@ module.exports.lookupId = function(id, type) { module.exports.search = function(data) { var deferred = Q.defer(); - var query = ""; - var entity = ""; + var query, album, entity; var type = data.type; if (type == "album") { query = data.artist.name + " " + data.name; + album = data.name; entity = "album"; } else if (type == "track") { query = data.artist.name + " " + data.album.name + " " + data.name; + album = data.album.name; entity = "musicTrack"; } @@ -68,7 +69,18 @@ module.exports.search = function(data) { var data = JSON.parse(res.text); 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 { var result = data.results[0]; diff --git a/lib/services/rdio.js b/lib/services/rdio.js index 3a4a1e4..7180078 100644 --- a/lib/services/rdio.js +++ b/lib/services/rdio.js @@ -115,22 +115,34 @@ module.exports.search = function(data) { }).shift(); if (!result) { - return deferred.resolve({service: "rdio"}); - } - 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 + 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: "rdio"}); } - }); + } 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; }; diff --git a/lib/services/spotify.js b/lib/services/spotify.js index b100fdc..64e5a61 100644 --- a/lib/services/spotify.js +++ b/lib/services/spotify.js @@ -56,29 +56,40 @@ module.exports.lookupId = function(id, type) { module.exports.search = function(data) { var deferred = Q.defer(); - var query = ""; + var query, album; var type = data.type; if (type == "album") { query = "artist:" + data.artist.name.replace(":", "") + " album:" + data.name.replace(":", ""); + album = data.name; } else if (type == "track") { 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) { if ( err ) { - console.log('Error occurred: ' + err); + deferred.resolve({service: "spotify"}); return; } if (!data[type + "s"].items[0]) { - deferred.resolve({service:"spotify"}); - return; + 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: "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; }