diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java index 566da52170..2fef3160d6 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java @@ -233,7 +233,7 @@ private YoutubeParsingHelper() { * The three digits at the end can be random, but are required. *

*/ - private static final String CONSENT_COOKIE_VALUE = "PENDING+"; + private static final String CONSENT_COOKIE_VALUE = "YES+"; /** * YouTube {@code CONSENT} cookie. diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java index 49225330be..a165c209d1 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java @@ -2,7 +2,7 @@ import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.YOUTUBEI_V1_URL; -import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.addClientInfoHeaders; +import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.addYouTubeHeaders; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.extractCookieValue; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.extractPlaylistTypeFromPlaylistId; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey; @@ -89,7 +89,7 @@ public void onFetchPage(@Nonnull final Downloader downloader) final byte[] body = JsonWriter.string(jsonBody.done()).getBytes(StandardCharsets.UTF_8); final Map> headers = new HashMap<>(); - addClientInfoHeaders(headers); + addYouTubeHeaders(headers); final Response response = getDownloader().post(YOUTUBEI_V1_URL + "next?key=" + getKey() + DISABLE_PRETTY_PRINT_PARAMETER, headers, body, localization); @@ -212,7 +212,7 @@ public InfoItemsPage getPage(final Page page) throws IOException final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); final Map> headers = new HashMap<>(); - addClientInfoHeaders(headers); + addYouTubeHeaders(headers); final Response response = getDownloader().post(page.getUrl(), headers, page.getBody(), getExtractorLocalization()); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java index bcbabbcb75..e3965d3c9c 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java @@ -142,46 +142,42 @@ public String getUrl() throws ParsingException { @Nonnull @Override public String getSearchSuggestion() throws ParsingException { - final JsonObject itemSectionRenderer = JsonUtils.getArray(JsonUtils.getArray(initialData, - "contents.tabbedSearchResultsRenderer.tabs").getObject(0), - "tabRenderer.content.sectionListRenderer.contents") + for (final Object obj : initialData + .getObject("contents") + .getObject("tabbedSearchResultsRenderer") + .getArray("tabs") .getObject(0) - .getObject("itemSectionRenderer"); - if (itemSectionRenderer.isEmpty()) { - return ""; - } + .getObject("tabRenderer") + .getObject("content") + .getObject("sectionListRenderer") + .getArray("contents")) { + final JsonObject itemSectionRenderer = + ((JsonObject) obj).getObject("itemSectionRenderer"); + + if (itemSectionRenderer.isEmpty()) { + continue; + } - final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents") - .getObject(0).getObject("didYouMeanRenderer"); - final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents") - .getObject(0) - .getObject("showingResultsForRenderer"); - - if (!didYouMeanRenderer.isEmpty()) { - return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery")); - } else if (!showingResultsForRenderer.isEmpty()) { - return JsonUtils.getString(showingResultsForRenderer, - "correctedQueryEndpoint.searchEndpoint.query"); - } else { - return ""; + final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents") + .getObject(0).getObject("didYouMeanRenderer"); + final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents") + .getObject(0) + .getObject("showingResultsForRenderer"); + + if (!didYouMeanRenderer.isEmpty()) { + return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery")); + } else if (!showingResultsForRenderer.isEmpty()) { + return JsonUtils.getString(showingResultsForRenderer, + "correctedQueryEndpoint.searchEndpoint.query"); + } } + + return ""; } @Override public boolean isCorrectedSearch() throws ParsingException { - final JsonObject itemSectionRenderer = JsonUtils.getArray(JsonUtils.getArray(initialData, - "contents.tabbedSearchResultsRenderer.tabs").getObject(0), - "tabRenderer.content.sectionListRenderer.contents") - .getObject(0) - .getObject("itemSectionRenderer"); - if (itemSectionRenderer.isEmpty()) { - return false; - } - - final JsonObject firstContent = itemSectionRenderer.getArray("contents").getObject(0); - - return firstContent.has("didYouMeanRenderer") - || firstContent.has("showingResultsForRenderer"); + return getSearchSuggestion() != ""; } @Nonnull diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampSearchExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampSearchExtractorTest.java index 4c9a3172b3..ea0ad8f5f1 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampSearchExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampSearchExtractorTest.java @@ -77,14 +77,13 @@ public void testAlbumSearch() throws ExtractionException, IOException { .getItems().get(0); // Minecraft volume alpha should be the first result, no? - assertEquals("Minecraft - Volume Alpha", minecraft.getName()); + assertEquals("Minecraft: Volume Alpha (cover)", minecraft.getName()); assertTrue(minecraft.getThumbnailUrl().endsWith(".jpg")); assertTrue(minecraft.getThumbnailUrl().contains("f4.bcbits.com/img/")); - assertEquals("https://c418.bandcamp.com/album/minecraft-volume-alpha", minecraft.getUrl()); + assertEquals("https://chromacat248.bandcamp.com/album/minecraft-volume-alpha-cover", minecraft.getUrl()); // Verify that playlist tracks counts get extracted correctly - assertEquals(24, ((PlaylistInfoItem) minecraft).getStreamCount()); - + assertEquals(3, ((PlaylistInfoItem) minecraft).getStreamCount()); } /** diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubePlaylistExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubePlaylistExtractorTest.java index 15e16bc137..8164a06e15 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubePlaylistExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubePlaylistExtractorTest.java @@ -43,7 +43,7 @@ public void testGetUploaderUrl() throws ParsingException { @Test public void testGetUploaderAvatarUrl() throws ParsingException { - assertEquals("https://framatube.org/lazy-static/avatars/c6801ff9-cb49-42e6-b2db-3db623248115.jpg", extractor.getUploaderAvatarUrl()); + assertEquals("https://framatube.org/lazy-static/avatars/cd0f781d-0287-4be2-94f1-24cd732337b2.jpg", extractor.getUploaderAvatarUrl()); } @Test @@ -68,7 +68,7 @@ public void testGetSubChannelName() throws ParsingException { @Test public void testGetSubChannelAvatarUrl() throws ParsingException { - assertEquals("https://framatube.org/lazy-static/avatars/e801ccce-8694-4309-b0ab-e6f0e552ef77.png", + assertEquals("https://framatube.org/lazy-static/avatars/637753af-fcf2-4b61-88f9-b9857c953457.png", extractor.getSubChannelAvatarUrl()); } } diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMixPlaylistExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMixPlaylistExtractorTest.java index b562d6594d..e1910e1498 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMixPlaylistExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMixPlaylistExtractorTest.java @@ -11,6 +11,7 @@ import com.grack.nanojson.JsonWriter; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.schabi.newpipe.downloader.DownloaderFactory; import org.schabi.newpipe.extractor.ExtractorAsserts; @@ -221,7 +222,7 @@ void getPlaylistType() throws ParsingException { } public static class MyMix { - private static final String VIDEO_ID = "_AzeUSL9lZc"; + private static final String VIDEO_ID = "YVkUvmDQ3HY"; @BeforeAll public static void setUp() throws Exception { @@ -249,7 +250,7 @@ void getName() throws Exception { void getThumbnailUrl() throws Exception { final String thumbnailUrl = extractor.getThumbnailUrl(); assertIsSecureUrl(thumbnailUrl); - assertTrue(thumbnailUrl.startsWith("https://i.ytimg.com/vi/_AzeUSL9lZc")); + assertTrue(thumbnailUrl.startsWith("https://i.ytimg.com/vi/" + VIDEO_ID)); } @Test diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorDefaultTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorDefaultTest.java index f1506154b6..facfdbc68e 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorDefaultTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorDefaultTest.java @@ -407,14 +407,6 @@ public static void setUp() throws Exception { @Nullable @Override public String expectedTextualUploadDate() { return "2019-06-12"; } @Override public long expectedLikeCountAtLeast() { return 70000; } @Override public long expectedDislikeCountAtLeast() { return -1; } - @Override public List expectedMetaInfo() throws MalformedURLException { - return Collections.singletonList(new MetaInfo( - EMPTY_STRING, - new Description("Funk is a German public broadcast service.", Description.PLAIN_TEXT), - Collections.singletonList(new URL("https://de.wikipedia.org/wiki/Funk_(Medienangebot)?wprov=yicw1")), - Collections.singletonList("Wikipedia (German)") - )); - } @Override public boolean expectedUploaderVerified() { return true; } @Override public String expectedLicence() { return YOUTUBE_LICENCE; } @Override public String expectedCategory() { return "Education"; } diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorLivestreamTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorLivestreamTest.java index 81fbf126a1..65a728fb05 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorLivestreamTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorLivestreamTest.java @@ -19,7 +19,7 @@ public class YoutubeStreamExtractorLivestreamTest extends DefaultStreamExtractorTest { private static final String RESOURCE_PATH = DownloaderFactory.RESOURCE_PATH + "services/youtube/extractor/stream/"; - private static final String ID = "5qap5aO4i9A"; + private static final String ID = "jfKfPfyJRdk"; private static final int TIMESTAMP = 1737; private static final String URL = YoutubeStreamExtractorDefaultTest.BASE_URL + ID + "&t=" + TIMESTAMP; private static StreamExtractor extractor; @@ -57,9 +57,9 @@ public void testUploaderName() throws Exception { @Override public long expectedLength() { return 0; } @Override public long expectedTimestamp() { return TIMESTAMP; } @Override public long expectedViewCountAtLeast() { return 0; } - @Nullable @Override public String expectedUploadDate() { return "2020-02-22 00:00:00.000"; } - @Nullable @Override public String expectedTextualUploadDate() { return "2020-02-22"; } - @Override public long expectedLikeCountAtLeast() { return 825000; } + @Nullable @Override public String expectedUploadDate() { return "2020-07-12 00:00:00.000"; } + @Nullable @Override public String expectedTextualUploadDate() { return "2020-07-12"; } + @Override public long expectedLikeCountAtLeast() { return 280_000; } @Override public long expectedDislikeCountAtLeast() { return -1; } @Override public boolean expectedHasSubtitles() { return false; } @Nullable @Override public String expectedDashMpdUrlContains() { return "https://manifest.googlevideo.com/api/manifest/dash/"; }