From c1784a4bdb4b9572f49d9952316f73bd6e4d5e67 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sun, 8 Oct 2023 11:36:13 +0200 Subject: [PATCH] [YouTube] Add channel owner to comments --- .../newpipe/extractor/comments/CommentsInfoItem.java | 10 +++++----- .../comments/CommentsInfoItemExtractor.java | 4 ++-- .../comments/CommentsInfoItemsCollector.java | 2 +- .../extractors/YoutubeCommentsInfoItemExtractor.java | 10 ++-------- .../youtube/YoutubeCommentsExtractorTest.java | 12 ++++++------ 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItem.java b/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItem.java index 0ddbd6a9c..e1df4013d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItem.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItem.java @@ -30,7 +30,7 @@ public class CommentsInfoItem extends InfoItem { private int replyCount; @Nullable private Page replies; - private boolean creatorReply; + private boolean isChannelOwner; public static final int NO_LIKE_COUNT = -1; public static final int NO_STREAM_POSITION = -1; @@ -174,12 +174,12 @@ public class CommentsInfoItem extends InfoItem { return this.replies; } - public void setCreatorReply(final boolean creatorReply) { - this.creatorReply = creatorReply; + public void setChannelOwner(final boolean channelOwner) { + this.isChannelOwner = channelOwner; } - public boolean hasCreatorReply() { - return creatorReply; + public boolean isChannelOwner() { + return isChannelOwner; } } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemExtractor.java index 63db11d2e..3adf1f2c4 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemExtractor.java @@ -136,9 +136,9 @@ public interface CommentsInfoItemExtractor extends InfoItemExtractor { } /** - * Whether the comment was replied to by the creator. + * Whether the comment was made by the channel owner. */ - default boolean hasCreatorReply() throws ParsingException { + default boolean isChannelOwner() throws ParsingException { return false; } } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemsCollector.java b/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemsCollector.java index d9b31e130..397ffb5c7 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemsCollector.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/comments/CommentsInfoItemsCollector.java @@ -102,7 +102,7 @@ public final class CommentsInfoItemsCollector } try { - resultItem.setCreatorReply(extractor.hasCreatorReply()); + resultItem.setChannelOwner(extractor.isChannelOwner()); } catch (final Exception e) { addError(e); } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsInfoItemExtractor.java index 7410b57d6..aa527358c 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsInfoItemExtractor.java @@ -279,14 +279,8 @@ public class YoutubeCommentsInfoItemExtractor implements CommentsInfoItemExtract } @Override - public boolean hasCreatorReply() throws ParsingException { - try { - final JsonObject commentRepliesRenderer = JsonUtils.getObject(json, - "replies.commentRepliesRenderer"); - return commentRepliesRenderer.has("viewRepliesCreatorThumbnail"); - } catch (final Exception e) { - return false; - } + public boolean isChannelOwner() throws ParsingException { + return getCommentRenderer().getBoolean("authorIsChannelOwner"); } } diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeCommentsExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeCommentsExtractorTest.java index 8df29c9b4..7128ecc42 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeCommentsExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeCommentsExtractorTest.java @@ -352,14 +352,14 @@ public class YoutubeCommentsExtractorTest { } } - public static class CreatorReply { + public static class ChannelOwnerTest { private final static String url = "https://www.youtube.com/watch?v=bem4adjGKjE"; private static YoutubeCommentsExtractor extractor; @BeforeAll public static void setUp() throws Exception { YoutubeTestsUtils.ensureStateless(); - NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "creatorReply")); + NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "channelOwner")); extractor = (YoutubeCommentsExtractor) YouTube .getCommentsExtractor(url); extractor.fetchPage(); @@ -371,7 +371,7 @@ public class YoutubeCommentsExtractorTest { DefaultTests.defaultTestListOfItems(YouTube, comments.getItems(), comments.getErrors()); - boolean creatorReply = false; + boolean channelOwner = false; for (final CommentsInfoItem c : comments.getItems()) { assertFalse(Utils.isBlank(c.getUploaderUrl())); @@ -385,11 +385,11 @@ public class YoutubeCommentsExtractorTest { assertFalse(Utils.isBlank(c.getUrl())); assertTrue(c.getLikeCount() >= 0); assertFalse(Utils.isBlank(c.getCommentText().getContent())); - if (c.hasCreatorReply()) { - creatorReply = true; + if (c.isChannelOwner()) { + channelOwner = true; } } - assertTrue(creatorReply, "No comments was replied to by creator"); + assertTrue(channelOwner, "No comments was made by the channel owner"); } }