diff --git a/README b/README deleted file mode 100644 index e69de29..0000000 diff --git a/README.md b/README.md new file mode 100644 index 0000000..407e4ec --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Vkontakte (VK.com) API music search tool + +Don't forget to log in to [vk.com API](http://vk.com/developers.php?oid=-17680044&p=Open_API) + +```coffeescript +vk_music = new VkontakteMusic +url = vk_music.search "Kasabian", "L.S.F. (Lost Souls Forever)", 197 + +audio = document.createElement "audio" +audio.setAttribute "src", url +document.getElementsByTagName("body")[0].appendChild audio +audio.play() +``` diff --git a/vkontakte_music.coffee b/vkontakte_music.coffee new file mode 100644 index 0000000..354dc3d --- /dev/null +++ b/vkontakte_music.coffee @@ -0,0 +1,58 @@ +class VkontakteMusic + query_results = {} + + search: (artist, track, duration, callback) -> + query = this.prepareQuery artist, track + if @query_results[query] + callback @query_results[query] + that = this + VK.Api.call 'audio.search', q: query, (r) -> + best_result = that.matchPerfectResult(r.response) + that.query_results[query] = best_result + callback best_result + + matchPerfectResult: (data, artist, track, duration) -> + duration = duration.split ':' + duration = parseInt(duration[0], 10) * 60 + parseInt(duration[1], 10) + best_score = 0; + best_result = null; + for item in data + if typeof item is 'object' + score = 0; + item.artist = item.artist.trim(); + item.title = item.title.trim(); + if item.artist.length > 0 + if item.artist == artist + score += 10 + else if item.artist.split(artist).length is 2 + score += 5 + else if item.title.split(artist).length is 2 + score += 4 + if item.artist.length > 0 + if item.title == track + score += 10 + else if item.title.split(track).length is 2 + score += 5 + if parseInt(item.duration, 10) == duration + score += 15 + else + delta = Math.abs parseInt(item.duration, 10) - duration + score += (10 - delta) if delta < 10 + if score > best_score + best_score = score + best_result = item.url + if score is 35 + return best_result + best_result + + prepareQuery: (artist, track) -> + artist+" "+track.replace(/\(.*\)/i, '').split('/')[0] + + trim: (str) -> + while str.indexOf(' ') != -1 + str = str.replace(' ', ' ') + if str.charAt(0) == ' ' + str = str.substring 1 + if str.charAt(str.length - 1) == ' ' + str = str.substring(0, str.length - 1) + str \ No newline at end of file