Skip to content

Commit 2b6fe29

Browse files
committed
Fixed YoutubeMusicSearchExtractorTest
The renderers and queries got changed.
1 parent d6586da commit 2b6fe29

File tree

2 files changed

+57
-63
lines changed

2 files changed

+57
-63
lines changed

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,13 @@
11
package org.schabi.newpipe.extractor.services.youtube.extractors;
22

3-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER;
4-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
5-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
6-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
7-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody;
8-
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ALBUMS;
9-
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ARTISTS;
10-
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_PLAYLISTS;
11-
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_SONGS;
12-
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_VIDEOS;
13-
import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING;
14-
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
15-
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
16-
173
import com.grack.nanojson.JsonArray;
184
import com.grack.nanojson.JsonObject;
195
import com.grack.nanojson.JsonParser;
206
import com.grack.nanojson.JsonParserException;
217
import com.grack.nanojson.JsonWriter;
22-
238
import org.schabi.newpipe.extractor.InfoItem;
249
import org.schabi.newpipe.extractor.MetaInfo;
10+
import org.schabi.newpipe.extractor.MultiInfoItemsCollector;
2511
import org.schabi.newpipe.extractor.Page;
2612
import org.schabi.newpipe.extractor.StreamingService;
2713
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -31,21 +17,34 @@
3117
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
3218
import org.schabi.newpipe.extractor.localization.DateWrapper;
3319
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
34-
import org.schabi.newpipe.extractor.MultiInfoItemsCollector;
3520
import org.schabi.newpipe.extractor.search.SearchExtractor;
3621
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
3722
import org.schabi.newpipe.extractor.utils.JsonUtils;
3823
import org.schabi.newpipe.extractor.utils.Parser;
3924
import org.schabi.newpipe.extractor.utils.Utils;
4025

26+
import javax.annotation.Nonnull;
27+
import javax.annotation.Nullable;
4128
import java.io.IOException;
4229
import java.util.Collections;
4330
import java.util.HashMap;
4431
import java.util.List;
4532
import java.util.Map;
33+
import java.util.stream.Collectors;
4634

47-
import javax.annotation.Nonnull;
48-
import javax.annotation.Nullable;
35+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER;
36+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
37+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
38+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
39+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody;
40+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ALBUMS;
41+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ARTISTS;
42+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_PLAYLISTS;
43+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_SONGS;
44+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_VIDEOS;
45+
import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING;
46+
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
47+
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
4948

5049
public class YoutubeMusicSearchExtractor extends SearchExtractor {
5150
private JsonObject initialData;
@@ -133,55 +132,52 @@ public void onFetchPage(@Nonnull final Downloader downloader)
133132
}
134133
}
135134

136-
@Nonnull
137-
@Override
138-
public String getUrl() throws ParsingException {
139-
return super.getUrl();
135+
private List<JsonObject> getItemSectionRendererContents() {
136+
return initialData
137+
.getObject("contents")
138+
.getObject("tabbedSearchResultsRenderer")
139+
.getArray("tabs")
140+
.getObject(0)
141+
.getObject("tabRenderer")
142+
.getObject("content")
143+
.getObject("sectionListRenderer")
144+
.getArray("contents")
145+
.stream()
146+
.filter(JsonObject.class::isInstance)
147+
.map(JsonObject.class::cast)
148+
.map(c -> c.getObject("itemSectionRenderer"))
149+
.filter(isr -> !isr.isEmpty())
150+
.map(isr -> isr
151+
.getArray("contents")
152+
.getObject(0))
153+
.collect(Collectors.toList());
140154
}
141155

142156
@Nonnull
143157
@Override
144158
public String getSearchSuggestion() throws ParsingException {
145-
final JsonObject itemSectionRenderer = JsonUtils.getArray(JsonUtils.getArray(initialData,
146-
"contents.tabbedSearchResultsRenderer.tabs").getObject(0),
147-
"tabRenderer.content.sectionListRenderer.contents")
148-
.getObject(0)
149-
.getObject("itemSectionRenderer");
150-
if (itemSectionRenderer.isEmpty()) {
151-
return "";
159+
for (final JsonObject obj : getItemSectionRendererContents()) {
160+
final JsonObject didYouMeanRenderer = obj
161+
.getObject("didYouMeanRenderer");
162+
final JsonObject showingResultsForRenderer = obj
163+
.getObject("showingResultsForRenderer");
164+
165+
if (!didYouMeanRenderer.isEmpty()) {
166+
return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery"));
167+
} else if (!showingResultsForRenderer.isEmpty()) {
168+
return JsonUtils.getString(showingResultsForRenderer,
169+
"correctedQueryEndpoint.searchEndpoint.query");
170+
}
152171
}
153172

154-
final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents")
155-
.getObject(0).getObject("didYouMeanRenderer");
156-
final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents")
157-
.getObject(0)
158-
.getObject("showingResultsForRenderer");
159-
160-
if (!didYouMeanRenderer.isEmpty()) {
161-
return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery"));
162-
} else if (!showingResultsForRenderer.isEmpty()) {
163-
return JsonUtils.getString(showingResultsForRenderer,
164-
"correctedQueryEndpoint.searchEndpoint.query");
165-
} else {
166-
return "";
167-
}
173+
return "";
168174
}
169175

170176
@Override
171177
public boolean isCorrectedSearch() throws ParsingException {
172-
final JsonObject itemSectionRenderer = JsonUtils.getArray(JsonUtils.getArray(initialData,
173-
"contents.tabbedSearchResultsRenderer.tabs").getObject(0),
174-
"tabRenderer.content.sectionListRenderer.contents")
175-
.getObject(0)
176-
.getObject("itemSectionRenderer");
177-
if (itemSectionRenderer.isEmpty()) {
178-
return false;
179-
}
180-
181-
final JsonObject firstContent = itemSectionRenderer.getArray("contents").getObject(0);
182-
183-
return firstContent.has("didYouMeanRenderer")
184-
|| firstContent.has("showingResultsForRenderer");
178+
return getItemSectionRendererContents()
179+
.stream()
180+
.anyMatch(obj -> obj.has("showingResultsForRenderer"));
185181
}
186182

187183
@Nonnull

extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeMusicSearchExtractorTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
package org.schabi.newpipe.extractor.services.youtube.search;
22

3-
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
4-
import static java.util.Collections.singletonList;
5-
63
import org.junit.jupiter.api.BeforeAll;
74
import org.junit.jupiter.api.Disabled;
85
import org.schabi.newpipe.downloader.DownloaderTestImpl;
9-
import org.schabi.newpipe.downloader.MockOnly;
106
import org.schabi.newpipe.extractor.InfoItem;
117
import org.schabi.newpipe.extractor.NewPipe;
128
import org.schabi.newpipe.extractor.StreamingService;
139
import org.schabi.newpipe.extractor.search.SearchExtractor;
1410
import org.schabi.newpipe.extractor.services.DefaultSearchExtractorTest;
1511
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
1612

13+
import javax.annotation.Nullable;
1714
import java.net.URLEncoder;
1815

19-
import javax.annotation.Nullable;
16+
import static java.util.Collections.singletonList;
17+
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
2018

2119
// Doesn't work with mocks. Makes request with different `dataToSend` I think
2220
public class YoutubeMusicSearchExtractorTest {
@@ -158,8 +156,8 @@ public static void setUp() throws Exception {
158156

159157
public static class CorrectedSearch extends DefaultSearchExtractorTest {
160158
private static SearchExtractor extractor;
161-
private static final String QUERY = "nocopyrigh sounds";
162-
private static final String EXPECTED_SUGGESTION = "nocopyrightsounds";
159+
private static final String QUERY = "no copyrigh sounds";
160+
private static final String EXPECTED_SUGGESTION = "no copyright sounds";
163161

164162
@BeforeAll
165163
public static void setUp() throws Exception {

0 commit comments

Comments
 (0)