From f3c22da618289eea560136a0a87b79a8ba79c760 Mon Sep 17 00:00:00 2001 From: bopol Date: Mon, 11 Jan 2021 18:38:54 +0100 Subject: [PATCH] comments: add heartedByCreator and extract it for youtube --- .../extractor/comments/CommentsInfoItem.java | 9 ++++ .../comments/CommentsInfoItemExtractor.java | 5 ++ .../comments/CommentsInfoItemsCollector.java | 6 +++ .../PeertubeCommentsInfoItemExtractor.java | 5 ++ .../SoundcloudCommentsInfoItemExtractor.java | 5 ++ .../YoutubeCommentsInfoItemExtractor.java | 5 ++ .../youtube/YoutubeCommentsExtractorTest.java | 51 ++++++++++++++++--- 7 files changed, 79 insertions(+), 7 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 e8871118a3..06ce84c447 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 @@ -16,6 +16,7 @@ public class CommentsInfoItem extends InfoItem { @Nullable private DateWrapper uploadDate; private int likeCount; + private boolean heartedByUploader; public CommentsInfoItem(int serviceId, String url, String name) { super(InfoType.COMMENT, serviceId, url, name); @@ -85,4 +86,12 @@ public int getLikeCount() { public void setLikeCount(int likeCount) { this.likeCount = likeCount; } + + public void setHeartedByUploader(boolean isHeartedByUploader) { + this.heartedByUploader = isHeartedByUploader; + } + + public boolean getHeartedByUploader() { + return this.heartedByUploader; + } } 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 cf1501a229..ff56204f28 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 @@ -40,4 +40,9 @@ public interface CommentsInfoItemExtractor extends InfoItemExtractor { String getUploaderName() throws ParsingException; String getUploaderAvatarUrl() throws ParsingException; + + /** + * Whether the comment has been hearted by the uploader + */ + boolean getHeartedByUploader() throws ParsingException; } 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 126d7b1837..3323f00b8c 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 @@ -70,6 +70,12 @@ public CommentsInfoItem extract(CommentsInfoItemExtractor extractor) throws Pars addError(e); } + try { + resultItem.setHeartedByUploader(extractor.getHeartedByUploader()); + } catch (Exception e) { + addError(e); + } + return resultItem; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsInfoItemExtractor.java index 446a4e8e7e..95b304dc45 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsInfoItemExtractor.java @@ -88,6 +88,11 @@ public String getUploaderAvatarUrl() { return baseUrl + value; } + @Override + public boolean getHeartedByUploader() throws ParsingException { + return false; + } + @Override public String getUploaderName() throws ParsingException { return JsonUtils.getString(item, "account.name") + "@" + JsonUtils.getString(item, "account.host"); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsInfoItemExtractor.java index 7969904eb0..b164ca45af 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsInfoItemExtractor.java @@ -39,6 +39,11 @@ public String getUploaderAvatarUrl() { return json.getObject("user").getString("avatar_url"); } + @Override + public boolean getHeartedByUploader() throws ParsingException { + return false; + } + @Override public String getUploaderUrl() { return json.getObject("user").getString("permalink_url"); 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 d960bc2ecb..74791e4ba6 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 @@ -115,6 +115,11 @@ public String getUploaderAvatarUrl() throws ParsingException { } } + @Override + public boolean getHeartedByUploader() throws ParsingException { + return json.has("creatorHeart"); + } + @Override public String getUploaderName() throws ParsingException { try { 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 55669b68e9..052108d123 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 @@ -16,10 +16,7 @@ import java.io.IOException; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import static org.schabi.newpipe.extractor.ServiceList.YouTube; public class YoutubeCommentsExtractorTest { @@ -28,9 +25,8 @@ public class YoutubeCommentsExtractorTest { */ public static class Thomas { private static final String url = "https://www.youtube.com/watch?v=D00Au7k3i6o"; - private static YoutubeCommentsExtractor extractor; - private static final String commentContent = "Category: Education"; + private static YoutubeCommentsExtractor extractor; @BeforeClass public static void setUp() throws Exception { @@ -116,8 +112,8 @@ private boolean findInComments(List comments, String comment) * Test a video with an empty comment */ public static class EmptyComment { - private static YoutubeCommentsExtractor extractor; private final static String url = "https://www.youtube.com/watch?v=VM_6n762j6M"; + private static YoutubeCommentsExtractor extractor; @BeforeClass public static void setUp() throws Exception { @@ -152,4 +148,45 @@ public void testGetCommentsAllData() throws IOException, ExtractionException { } } + + public static class HeartedByCreator { + private final static String url = "https://www.youtube.com/watch?v=tR11b7uh17Y"; + private static YoutubeCommentsExtractor extractor; + + @BeforeClass + public static void setUp() throws Exception { + NewPipe.init(DownloaderTestImpl.getInstance()); + extractor = (YoutubeCommentsExtractor) YouTube + .getCommentsExtractor(url); + extractor.fetchPage(); + } + + @Test + public void testGetCommentsAllData() throws IOException, ExtractionException { + final InfoItemsPage comments = extractor.getInitialPage(); + + DefaultTests.defaultTestListOfItems(YouTube, comments.getItems(), comments.getErrors()); + + boolean heartedByUploader = false; + + for (CommentsInfoItem c : comments.getItems()) { + assertFalse(Utils.isBlank(c.getUploaderUrl())); + assertFalse(Utils.isBlank(c.getUploaderName())); + assertFalse(Utils.isBlank(c.getUploaderAvatarUrl())); + assertFalse(Utils.isBlank(c.getCommentId())); + assertFalse(Utils.isBlank(c.getName())); + assertFalse(Utils.isBlank(c.getTextualUploadDate())); + assertNotNull(c.getUploadDate()); + assertFalse(Utils.isBlank(c.getThumbnailUrl())); + assertFalse(Utils.isBlank(c.getUrl())); + assertFalse(c.getLikeCount() < 0); + assertFalse(Utils.isBlank(c.getCommentText())); + if (c.getHeartedByUploader()) { + heartedByUploader = true; + } + } + assertTrue("No comments was hearted by uploader", heartedByUploader); + + } + } }