// ==UserScript== // @name RYM/ Sonemic: Average track rating // @version 1.1 // @description:en average track rating for rym/sonemic // @description average track rating for rym/sonemic // @match https://sonemic.com/release/* // @match https://rateyourmusic.com/release/* // @match http://rateyourmusic.com/release/* // @match http://sonemic.com/release/* // @namespace https://greasyfork.org/users/194849 // @downloadURL none // ==/UserScript== //RYM var $ = unsafeWindow.jQuery; var url = window.location.href; var weightedRatingSum_rym = 0; var numberOfTracks_rym = 0; var totalDuration = 0; var relativeTrackDuration; var weightedRating; var ratingSum = 0; //calculate total album duration $('#tracks li.track').each(function() { //get the track length in seconds var duration = $(this).find('.tracklist_duration').text().trim(); var a = duration.split(':'); var seconds = (+a[0]) * 60 + (+a[1]) if(!isNaN(seconds)){ totalDuration+=seconds; } }); //Iterate through the tracklist and calculate weighted rating $('#tracks li.track').each(function() { var rating = $(this).find('.track_rating').text(); //check if there is a valid rating value for the track if(parseFloat(rating) > 0){ if(totalDuration > 0){ //get the track length in seconds var duration = $(this).find('.tracklist_duration').text().trim(); var a = duration.split(':'); var seconds = (+a[0]) * 60 + (+a[1]) relativeTrackDuration = seconds / totalDuration; weightedRating = relativeTrackDuration * rating; console.log('weighted Rating track: ' + weightedRating); weightedRatingSum_rym += parseFloat(weightedRating); } else{ numberOfTracks_rym++; ratingSum += parseFloat(rating); } } }); var finalRating; console.log("duration: " +totalDuration); console.log("tracks: " +numberOfTracks_rym); console.log("sum: " +ratingSum); finalRating = (totalDuration > 0) ? weightedRatingSum_rym.toFixed(2) : (ratingSum / numberOfTracks_rym).toFixed(2); var header = $('.release_page_header').text(); var useless1 = document.getElementsByClassName("release_page_header"); for (var j = 0; j < useless1.length; j++) { var useless2 = useless1[j].innerText; if(useless2.includes("listing")){ var element = document.getElementsByClassName("release_page_header")[j]; var str = element.innerHTML; var text = str + "(Average: " +finalRating+ ")"; element.innerHTML = text; } } //SONEMIC if(url.includes('sonemic')){ var heading = document.getElementsByClassName("page_object_section_header"); var finalText; var numberOfTracks = document.getElementsByClassName("page_fragment_track_avg_rating"); var totalweightedRatingSum_rym = 0; var trackCounter = 0; console.log('heading: ' + heading[1].innerHTML); for (var i = 0; i < numberOfTracks.length; i++) { totalweightedRatingSum_rym += parseFloat(numberOfTracks[i].innerText); trackCounter++; } var finalRating_sonemic = parseFloat(totalweightedRatingSum_rym/trackCounter); finalText = "Tracks (Average: " +finalRating_sonemic.toFixed(2)+ ")"; heading[1].innerHTML = finalText; }