Remove old ways of getting YT dis/likes

* Added additional check for averageRating (in dislikes)
This commit is contained in:
litetex 2021-11-30 19:52:51 +01:00
parent fe432425df
commit 15b98ffdb4
1 changed files with 28 additions and 37 deletions

View File

@ -337,13 +337,8 @@ public class YoutubeStreamExtractor extends StreamExtractor {
@Override @Override
public long getLikeCount() throws ParsingException { public long getLikeCount() throws ParsingException {
assertPageFetched(); assertPageFetched();
String likesString = null; String likesString = "";
try { try {
likesString = getVideoPrimaryInfoRenderer().getObject("sentimentBar")
.getObject("sentimentBarRenderer").getString("tooltip");
if (likesString != null && likesString.contains("/")) {
likesString = likesString.split("/")[0];
} else {
likesString = getVideoPrimaryInfoRenderer() likesString = getVideoPrimaryInfoRenderer()
.getObject("videoActions") .getObject("videoActions")
.getObject("menuRenderer") .getObject("menuRenderer")
@ -354,7 +349,6 @@ public class YoutubeStreamExtractor extends StreamExtractor {
.getObject("accessibility") .getObject("accessibility")
.getObject("accessibilityData") .getObject("accessibilityData")
.getString("label"); .getString("label");
}
if (likesString == null) { if (likesString == null) {
// If this kicks in our button has no content and therefore ratings must be disabled // 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 { public long getDislikeCount() throws ParsingException {
assertPageFetched(); assertPageFetched();
try { // YouTube is "gradually rolling out" removing dislike count
String dislikesString = getVideoPrimaryInfoRenderer().getObject("sentimentBar") // https://blog.youtube/news-and-events/update-to-youtube/
.getObject("sentimentBarRenderer").getString("tooltip"); // Getting dislikes might not work forever
if (dislikesString != null && dislikesString.contains("/")) {
dislikesString = dislikesString.split("/")[1];
return Integer.parseInt(Utils.removeNonDigitCharacters(dislikesString));
} else {
// Calculate dislike with average rating and like count // Calculate dislike with average rating and like count
try {
long likes = getLikeCount(); long likes = getLikeCount();
double averageRating = playerResponse.getObject("videoDetails").getDouble("averageRating"); double averageRating = playerResponse.getObject("videoDetails").getDouble("averageRating");
if (likes != -1 && averageRating > 1) { if (likes != -1 && averageRating > 1 && averageRating <= 5) {
// If averageRating can't be gathered, it will be 0, // If averageRating can't be gathered, it will be 0,
// but we also can't divide by 0 so we need > 1 // but we also can't divide by 0 so we need > 1
return Math.round(likes * ((5 - averageRating) / (averageRating - 1))); return Math.round(likes * ((5 - averageRating) / (averageRating - 1)));
} }
} catch (final Exception ex) {
throw new ParsingException("Could not get dislike count", ex);
} }
} catch (final Exception e) {
}
// Silently fail as YouTube is "gradually rolling out" removing dislike count
// https://blog.youtube/news-and-events/update-to-youtube/
return -1; return -1;
} }