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 a0c2e99c..0e17c60c 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 @@ -121,8 +121,7 @@ public class YoutubeMusicSearchExtractor extends SearchExtractor { @Nonnull @Override public String getSearchSuggestion() throws ParsingException { - final JsonObject itemSectionRenderer = initialData.getObject("contents").getObject("sectionListRenderer") - .getArray("contents").getObject(0).getObject("itemSectionRenderer"); + 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 ""; } @@ -142,16 +141,17 @@ public class YoutubeMusicSearchExtractor extends SearchExtractor { } @Override - public boolean isCorrectedSearch() { - final JsonObject itemSectionRenderer = initialData.getObject("contents").getObject("sectionListRenderer") - .getArray("contents").getObject(0).getObject("itemSectionRenderer"); + 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 showingResultsForRenderer = itemSectionRenderer.getArray("contents").getObject(0) - .getObject("showingResultsForRenderer"); - return !showingResultsForRenderer.isEmpty(); + JsonObject firstContent = itemSectionRenderer.getArray("contents").getObject(0); + + final boolean corrected = firstContent + .has("didYouMeanRenderer") || firstContent.has("showingResultsForRenderer"); + return corrected; } @Nonnull @@ -165,7 +165,7 @@ public class YoutubeMusicSearchExtractor extends SearchExtractor { public InfoItemsPage getInitialPage() throws ExtractionException, IOException { final InfoItemsSearchCollector collector = new InfoItemsSearchCollector(getServiceId()); - final JsonArray contents = initialData.getObject("contents").getObject("sectionListRenderer").getArray("contents"); + final JsonArray contents = JsonUtils.getArray(JsonUtils.getArray(initialData, "contents.tabbedSearchResultsRenderer.tabs").getObject(0), "tabRenderer.content.sectionListRenderer.contents"); Page nextPage = null; diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeMusicSearchExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeMusicSearchExtractorTest.java index 785250e7..6f9f81f8 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeMusicSearchExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeMusicSearchExtractorTest.java @@ -133,6 +133,7 @@ public class YoutubeMusicSearchExtractorTest { public static class Suggestion extends DefaultSearchExtractorTest { private static SearchExtractor extractor; private static final String QUERY = "megaman x3"; + private static final boolean CORRECTED = true; @BeforeClass public static void setUp() throws Exception { @@ -150,6 +151,7 @@ public class YoutubeMusicSearchExtractorTest { @Override public String expectedSearchString() { return QUERY; } @Nullable @Override public String expectedSearchSuggestion() { return "mega man x3"; } @Override public InfoItem.InfoType expectedInfoItemType() { return InfoItem.InfoType.STREAM; } + @Override public boolean isCorrectedSearch() { return CORRECTED; } } public static class CorrectedSearch extends DefaultSearchExtractorTest {