diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java index cd15eea37..252e17c85 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java @@ -337,24 +337,18 @@ public class YoutubeStreamExtractor extends StreamExtractor { @Override public long getLikeCount() throws ParsingException { assertPageFetched(); - String likesString = null; + String likesString = ""; try { - likesString = getVideoPrimaryInfoRenderer().getObject("sentimentBar") - .getObject("sentimentBarRenderer").getString("tooltip"); - if (likesString != null && likesString.contains("/")) { - likesString = likesString.split("/")[0]; - } else { - likesString = getVideoPrimaryInfoRenderer() - .getObject("videoActions") - .getObject("menuRenderer") - .getArray("topLevelButtons") - .getObject(0) - .getObject("toggleButtonRenderer") - .getObject("defaultText") - .getObject("accessibility") - .getObject("accessibilityData") - .getString("label"); - } + likesString = getVideoPrimaryInfoRenderer() + .getObject("videoActions") + .getObject("menuRenderer") + .getArray("topLevelButtons") + .getObject(0) + .getObject("toggleButtonRenderer") + .getObject("defaultText") + .getObject("accessibility") + .getObject("accessibilityData") + .getString("label"); if (likesString == null) { // If this kicks in our button has no content and therefore ratings must be disabled @@ -380,27 +374,24 @@ public class YoutubeStreamExtractor extends StreamExtractor { public long getDislikeCount() throws ParsingException { assertPageFetched(); - try { - String dislikesString = getVideoPrimaryInfoRenderer().getObject("sentimentBar") - .getObject("sentimentBarRenderer").getString("tooltip"); - if (dislikesString != null && dislikesString.contains("/")) { - dislikesString = dislikesString.split("/")[1]; - return Integer.parseInt(Utils.removeNonDigitCharacters(dislikesString)); - } else { - // Calculate dislike with average rating and like count - long likes = getLikeCount(); - double averageRating = playerResponse.getObject("videoDetails").getDouble("averageRating"); - - if (likes != -1 && averageRating > 1) { - // If averageRating can't be gathered, it will be 0, - // but we also can't divide by 0 so we need > 1 - return Math.round(likes * ((5 - averageRating) / (averageRating - 1))); - } - } - } catch (final Exception e) { - } - // Silently fail as YouTube is "gradually rolling out" removing dislike count + // YouTube is "gradually rolling out" removing dislike count // https://blog.youtube/news-and-events/update-to-youtube/ + // Getting dislikes might not work forever + + // Calculate dislike with average rating and like count + try { + long likes = getLikeCount(); + double averageRating = playerResponse.getObject("videoDetails").getDouble("averageRating"); + + if (likes != -1 && averageRating > 1 && averageRating <= 5) { + // If averageRating can't be gathered, it will be 0, + // but we also can't divide by 0 so we need > 1 + return Math.round(likes * ((5 - averageRating) / (averageRating - 1))); + } + } catch (final Exception ex) { + throw new ParsingException("Could not get dislike count", ex); + } + return -1; }