Improved import/export functions, started using levenshtein distance as a supplement

This commit is contained in:
Kasper Rynning-Tønnesen
2017-11-10 14:03:11 +01:00
parent 721b1d1a25
commit b66888ada0
3 changed files with 159 additions and 108 deletions

View File

@@ -309,6 +309,84 @@ var Helper = {
len = len || 2;
var zeros = new Array(len).join('0');
return (zeros + str).slice(-len);
},
replaceForFind: function(str) {
str = str.toLowerCase();
if(str.startsWith("the")) {
str = str.replace("the", "");
}
str = str.replace(" hd", "");
str = str.replace("official hd video", "");
str = str.replace("unofficial video", "");
str = str.replace("studio footage", "");
str = str.replace("great song", "");
str = str.replace("-", " ");
str = str.replace("-", " ");
str = str.replace(" hq", " ");
str = str.replace("lyric video", "");
str = str.replace("lyrics video", "");
str = str.replace("album version", "");
str = str.replace("drive original movie soundtrack", "");
str = str.replace("original movie soundtrack", "");
str = str.replace("live sessions", "");
str = str.replace("audio only", "");
str = str.replace("audio", "");
str = str.replace("(new)", "");
str = str.replace(" by ", " ");
str = str.replace(" vs ", " ");
str = str.replace("(full)", " ");
str = str.replace("(video)", " ");
str = str.replace("&", " ");
str = str.replace("with lyrics", "");
str = str.replace("lyrics", "");
str = str.replace("w/", "");
str = str.replace("w/", "");
str = str.replace("official video", "");
str = str.replace("studio version", "");
str = str.replace("official music video", "");
str = str.replace("music video", "");
str = str.replace("musicvideo", "");
str = str.replace("original video", "");
str = str.replace("full version", "");
str = str.replace("full song", "");
str = str.replace("(official)", "");
str = str.replace("official", "");
str = str.replace("(original)", "");
str = str.replace("(", " ");
str = str.replace(")", " ");
str = str.replace("|", "");
str = str.replace("feat.", " ");
str = str.replace("feat", " ");
str = str.replace("ft.", " ");
str = str.replace("[", " ");
str = str.replace("]", " ");
str = str.replace(" free ", "");
str = str.replace(" hd", "");
str = str.replace("original mix", " ");
str = str.replace("radio edit", " ");
str = str.replace("pop version", " ");
str = str.replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ");
str = str.replace("(", " ");
str = str.replace(")", " ");
str = str.replace("[", " ");
str = str.replace("]", " ");
str = str.replace("-", " ");
str = str.replace("-", " ");
str = str.replace("-", " ");
str = str.replace("original mix", " ");
str = str.replace("album version", " ");
str = str.replace("abum version", " ");
str = str.replace("feat.", " ");
str = str.replace("feat.", " ");
str = str.replace("feat", " ");
str = str.replace("feat", " ");
str = str.replace("ft.", " ");
str = str.replace("radio edit", " ");
str = str.replace("pop version", " ");
str = str.replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ");
str = str.replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ");
return str;
}
};
@@ -329,3 +407,44 @@ String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.indexOf(searchString, position) === position;
};
function similarity(s1, s2) {
var longer = s1;
var shorter = s2;
if (s1.length < s2.length) {
longer = s2;
shorter = s1;
}
var longerLength = longer.length;
if (longerLength == 0) {
return 1.0;
}
return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength);
}
function editDistance(s1, s2) {
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();
var costs = new Array();
for (var i = 0; i <= s1.length; i++) {
var lastValue = i;
for (var j = 0; j <= s2.length; j++) {
if (i == 0)
costs[j] = j;
else {
if (j > 0) {
var newValue = costs[j - 1];
if (s1.charAt(i - 1) != s2.charAt(j - 1))
newValue = Math.min(Math.min(newValue, lastValue),
costs[j]) + 1;
costs[j - 1] = lastValue;
lastValue = newValue;
}
}
}
if (i > 0)
costs[s2.length] = lastValue;
}
return costs[s2.length];
}

View File

@@ -655,74 +655,24 @@ var List = {
}),
success: function(response){
var playlist_id = response.id;
$.each(full_playlist, function(i, curr_song){
List.searchSpotify(curr_song, playlist_id, user_id);
});
//$.each(full_playlist, function(i, curr_song){
var i = 0;
List.searchSpotify(full_playlist[i], playlist_id, user_id, full_playlist, i);
//});
}
});
}
})
},
searchSpotify: function(curr_song, playlist_id, user_id) {
searchSpotify: function(curr_song, playlist_id, user_id, full_playlist, current_element) {
var original_track = curr_song.title;
var track = (curr_song.title.toLowerCase().replace("-", " "));
if(track.startsWith("the")) {
track = track.replace("the", "");
}
track = track.replace(" hd", "");
track = track.replace("official hd video", "");
track = track.replace("unofficial video", "");
track = track.replace("studio footage", "");
track = track.replace("great song", "");
track = track.replace("-", " ");
track = track.replace("-", " ");
track = track.replace(" hq", " ");
track = track.replace("lyric video", "");
track = track.replace("lyrics video", "");
track = track.replace("album version", "");
track = track.replace("drive original movie soundtrack", "");
track = track.replace("original movie soundtrack", "");
track = track.replace("live sessions", "");
track = track.replace("audio only", "");
track = track.replace("audio", "");
track = track.replace("(new)", "");
track = track.replace(" by ", " ");
track = track.replace(" vs ", " ");
track = track.replace("(full)", " ");
track = track.replace("(video)", " ");
track = track.replace("&", " ");
track = track.replace("with lyrics", "");
track = track.replace("lyrics", "");
track = track.replace("w/", "");
track = track.replace("w/", "");
track = track.replace("official video", "");
track = track.replace("studio version", "");
track = track.replace("official music video", "");
track = track.replace("music video", "");
track = track.replace("musicvideo", "");
track = track.replace("original video", "");
track = track.replace("full version", "");
track = track.replace("full song", "");
track = track.replace("(official)", "");
track = track.replace("official", "");
track = track.replace("(original)", "");
track = track.replace("(", " ");
track = track.replace(")", " ");
track = track.replace("|", "");
track = track.replace("feat.", " ");
track = track.replace("feat", " ");
track = track.replace("ft.", " ");
track = track.replace("[", " ");
track = track.replace("]", " ");
track = track.replace(" free ", "");
track = track.replace(" hd", "");
track = track.replace("original mix", " ");
track = track.replace("radio edit", " ");
track = track.replace("pop version", " ");
track = track.replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ");
track = Helper.replaceForFind(track);
track = encodeURIComponent(track);
$(".current_number").removeClass("hide");
$(".current_number").text((current_element + 1) + " of " + (full_playlist.length));
$.ajax({
type: "GET",
url: "https://api.spotify.com/v1/search?q=" + track + "&type=track",
@@ -730,21 +680,8 @@ var List = {
'Authorization': 'Bearer ' + access_token_data.access_token
},
async: true,
statusCode: {
429: function(jqXHR) {
Helper.log(jqXHR.getAllResponseHeaders());
var retryAfter = jqXHR.getResponseHeader("Retry-After");
Helper.log(retryAfter);
if (!retryAfter) retryAfter = 5;
retryAfter = parseInt(retryAfter, 10);
Helper.log("Retry-After", retryAfter);
setTimeout(function(){
List.searchSpotify(curr_song, playlist_id, user_id);
}, retryAfter * 1000);
}
},
error: function(err){
if(err.status == 429){
if(err.status == 429 || err.status == 502){
Helper.log(err.getAllResponseHeaders());
var retryAfter = err.getResponseHeader("Retry-After");
Helper.log(retryAfter);
@@ -752,38 +689,26 @@ var List = {
retryAfter = parseInt(retryAfter, 10);
Helper.log("Retry-After", retryAfter);
setTimeout(function(){
List.searchSpotify(curr_song, playlist_id, user_id);
List.searchSpotify(curr_song, playlist_id, user_id, full_playlist, current_element);
}, retryAfter * 1000);
}
},
success: function(response){
var found = false;
$.each(response.tracks.items, function(i, data){
data.name = data.name.toLowerCase();
data.name = data.name.replace("(", " ");
data.name = data.name.replace(")", " ");
data.name = data.name.replace("[", " ");
data.name = data.name.replace("]", " ");
data.name = data.name.replace("-", " ");
data.name = data.name.replace("-", " ");
data.name = data.name.replace("-", " ");
data.name = data.name.replace("original mix", " ");
data.name = data.name.replace("album version", " ");
data.name = data.name.replace("abum version", " ");
data.name = data.name.replace("feat.", " ");
data.artists[0].name = data.artists[0].name.replace("feat.", " ");
data.artists[0].name = data.artists[0].name.replace("feat", " ");
data.name = data.name.replace("feat", " ");
data.name = data.name.replace("ft.", " ");
data.name = data.name.replace("radio edit", " ");
data.name = data.name.replace("pop version", " ");
data.name = data.name.replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ");
data.artists[0].name = data.artists[0].name.replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ").replace(" ", " ");
data.name = Helper.replaceForFind(data.name);
data.artists[0].name = Helper.replaceForFind(data.artists[0].name);
if(data.name.substring(data.name.length-1) == " ") data.name = data.name.substring(0,data.name.length-1);
if(data.name.substring(data.name.length-1) == "." && track.substring(track.length-1) != "."){
data.name = data.name.substring(0,data.name.length-1);
}
if(decodeURIComponent(track).indexOf(data.artists[0].name.toLowerCase()) >= 0 && decodeURIComponent(track).indexOf(data.name.toLowerCase()) >= 0){
if(similarity(data.artists[0].name + " - " + data.name, decodeURIComponent(track)) > 0.60) {
found = true;
List.uris.push(data.uri);
Helper.log("Found", track);
//List.num_songs = List.num_songs + 1;
return false;
} else if(decodeURIComponent(track).indexOf(data.artists[0].name.toLowerCase()) >= 0 && decodeURIComponent(track).indexOf(data.name.toLowerCase()) >= 0){
found = true;
List.uris.push(data.uri);
Helper.log("Found", track);
@@ -831,8 +756,11 @@ var List = {
not_added_song.find(".extra-add-text").attr("title", data);
$(".not-exported-container").append(not_added_song.html());
})
$(".current_number").addClass("hide");
$(".not-exported").removeClass("hide");
$(".spotify_export_button").css("display", "block");
} else {
List.searchSpotify(full_playlist[current_element + 1], playlist_id, user_id, full_playlist, current_element + 1);
}
}
});

View File

@@ -221,21 +221,25 @@ var Search = {
//var title = data.snippet.title;
var duration = Search.durationToSeconds(data.contentDetails.duration);
var not_matched = false;
$.each(temptitle, function(i, data_title){
if(data.snippet.title.toLowerCase().indexOf(data_title.toLowerCase()) == -1 || !(
data.snippet.title.toLowerCase().indexOf("cover") == -1 &&
title.toLowerCase().indexOf("cover") == -1 &&
((data.snippet.title.toLowerCase().indexOf("remix") == -1 &&
title.toLowerCase().indexOf("remix") == -1) ||
(data.snippet.title.toLowerCase().indexOf("remix") != -1 &&
title.toLowerCase().indexOf("remix") != -1) || !(data.snippet.title.toLowerCase().indexOf(artist[0].toLowerCase()) == -1 &&
(data.snippet.channelTitle.toLowerCase().indexOf(artist[0].toLowerCase()) == -1 &&
data.snippet.channelTitle.toLowerCase().indexOf("vevo") == -1)))
))
not_matched = true;
if(similarity(data.snippet.title, artist + " - " + title) > 0.75) {
not_matched = false;
} else {
$.each(temptitle, function(i, data_title){
if(data.snippet.title.toLowerCase().indexOf(data_title.toLowerCase()) == -1 || !(
data.snippet.title.toLowerCase().indexOf("cover") == -1 &&
title.toLowerCase().indexOf("cover") == -1 &&
((data.snippet.title.toLowerCase().indexOf("remix") == -1 &&
title.toLowerCase().indexOf("remix") == -1) ||
(data.snippet.title.toLowerCase().indexOf("remix") != -1 &&
title.toLowerCase().indexOf("remix") != -1) || !(data.snippet.title.toLowerCase().indexOf(artist[0].toLowerCase()) == -1 &&
(data.snippet.channelTitle.toLowerCase().indexOf(artist[0].toLowerCase()) == -1 &&
data.snippet.channelTitle.toLowerCase().indexOf("vevo") == -1)))
))
not_matched = true;
return false;
});
return false;
});
}
if((!not_matched)){
matched = true;