mirror of
https://github.com/TeamNewPipe/NewPipeExtractor.git
synced 2024-12-13 13:50:33 +05:30
Fixed `YoutubeMusicSearchExtractorTest
`
The renderers and queries got changed.
This commit is contained in:
parent
d6586da614
commit
2b6fe294b2
@ -1,5 +1,37 @@
|
|||||||
package org.schabi.newpipe.extractor.services.youtube.extractors;
|
package org.schabi.newpipe.extractor.services.youtube.extractors;
|
||||||
|
|
||||||
|
import com.grack.nanojson.JsonArray;
|
||||||
|
import com.grack.nanojson.JsonObject;
|
||||||
|
import com.grack.nanojson.JsonParser;
|
||||||
|
import com.grack.nanojson.JsonParserException;
|
||||||
|
import com.grack.nanojson.JsonWriter;
|
||||||
|
import org.schabi.newpipe.extractor.InfoItem;
|
||||||
|
import org.schabi.newpipe.extractor.MetaInfo;
|
||||||
|
import org.schabi.newpipe.extractor.MultiInfoItemsCollector;
|
||||||
|
import org.schabi.newpipe.extractor.Page;
|
||||||
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
|
import org.schabi.newpipe.extractor.downloader.Downloader;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
||||||
|
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
|
||||||
|
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
||||||
|
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
|
||||||
|
import org.schabi.newpipe.extractor.search.SearchExtractor;
|
||||||
|
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
|
||||||
|
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||||
|
import org.schabi.newpipe.extractor.utils.Parser;
|
||||||
|
import org.schabi.newpipe.extractor.utils.Utils;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER;
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER;
|
||||||
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
|
||||||
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
|
||||||
@ -14,39 +46,6 @@ import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING;
|
|||||||
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
|
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
|
||||||
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||||
|
|
||||||
import com.grack.nanojson.JsonArray;
|
|
||||||
import com.grack.nanojson.JsonObject;
|
|
||||||
import com.grack.nanojson.JsonParser;
|
|
||||||
import com.grack.nanojson.JsonParserException;
|
|
||||||
import com.grack.nanojson.JsonWriter;
|
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.InfoItem;
|
|
||||||
import org.schabi.newpipe.extractor.MetaInfo;
|
|
||||||
import org.schabi.newpipe.extractor.Page;
|
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
|
||||||
import org.schabi.newpipe.extractor.downloader.Downloader;
|
|
||||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
|
||||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
|
||||||
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
|
||||||
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
|
|
||||||
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
|
||||||
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
|
|
||||||
import org.schabi.newpipe.extractor.MultiInfoItemsCollector;
|
|
||||||
import org.schabi.newpipe.extractor.search.SearchExtractor;
|
|
||||||
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
|
|
||||||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
|
||||||
import org.schabi.newpipe.extractor.utils.Parser;
|
|
||||||
import org.schabi.newpipe.extractor.utils.Utils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class YoutubeMusicSearchExtractor extends SearchExtractor {
|
public class YoutubeMusicSearchExtractor extends SearchExtractor {
|
||||||
private JsonObject initialData;
|
private JsonObject initialData;
|
||||||
|
|
||||||
@ -133,55 +132,52 @@ public class YoutubeMusicSearchExtractor extends SearchExtractor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
private List<JsonObject> getItemSectionRendererContents() {
|
||||||
@Override
|
return initialData
|
||||||
public String getUrl() throws ParsingException {
|
.getObject("contents")
|
||||||
return super.getUrl();
|
.getObject("tabbedSearchResultsRenderer")
|
||||||
|
.getArray("tabs")
|
||||||
|
.getObject(0)
|
||||||
|
.getObject("tabRenderer")
|
||||||
|
.getObject("content")
|
||||||
|
.getObject("sectionListRenderer")
|
||||||
|
.getArray("contents")
|
||||||
|
.stream()
|
||||||
|
.filter(JsonObject.class::isInstance)
|
||||||
|
.map(JsonObject.class::cast)
|
||||||
|
.map(c -> c.getObject("itemSectionRenderer"))
|
||||||
|
.filter(isr -> !isr.isEmpty())
|
||||||
|
.map(isr -> isr
|
||||||
|
.getArray("contents")
|
||||||
|
.getObject(0))
|
||||||
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public String getSearchSuggestion() throws ParsingException {
|
public String getSearchSuggestion() throws ParsingException {
|
||||||
final JsonObject itemSectionRenderer = JsonUtils.getArray(JsonUtils.getArray(initialData,
|
for (final JsonObject obj : getItemSectionRendererContents()) {
|
||||||
"contents.tabbedSearchResultsRenderer.tabs").getObject(0),
|
final JsonObject didYouMeanRenderer = obj
|
||||||
"tabRenderer.content.sectionListRenderer.contents")
|
.getObject("didYouMeanRenderer");
|
||||||
.getObject(0)
|
final JsonObject showingResultsForRenderer = obj
|
||||||
.getObject("itemSectionRenderer");
|
.getObject("showingResultsForRenderer");
|
||||||
if (itemSectionRenderer.isEmpty()) {
|
|
||||||
return "";
|
if (!didYouMeanRenderer.isEmpty()) {
|
||||||
|
return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery"));
|
||||||
|
} else if (!showingResultsForRenderer.isEmpty()) {
|
||||||
|
return JsonUtils.getString(showingResultsForRenderer,
|
||||||
|
"correctedQueryEndpoint.searchEndpoint.query");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents")
|
return "";
|
||||||
.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 "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isCorrectedSearch() throws ParsingException {
|
public boolean isCorrectedSearch() throws ParsingException {
|
||||||
final JsonObject itemSectionRenderer = JsonUtils.getArray(JsonUtils.getArray(initialData,
|
return getItemSectionRendererContents()
|
||||||
"contents.tabbedSearchResultsRenderer.tabs").getObject(0),
|
.stream()
|
||||||
"tabRenderer.content.sectionListRenderer.contents")
|
.anyMatch(obj -> obj.has("showingResultsForRenderer"));
|
||||||
.getObject(0)
|
|
||||||
.getObject("itemSectionRenderer");
|
|
||||||
if (itemSectionRenderer.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final JsonObject firstContent = itemSectionRenderer.getArray("contents").getObject(0);
|
|
||||||
|
|
||||||
return firstContent.has("didYouMeanRenderer")
|
|
||||||
|| firstContent.has("showingResultsForRenderer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
@ -1,12 +1,8 @@
|
|||||||
package org.schabi.newpipe.extractor.services.youtube.search;
|
package org.schabi.newpipe.extractor.services.youtube.search;
|
||||||
|
|
||||||
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
|
|
||||||
import static java.util.Collections.singletonList;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Disabled;
|
import org.junit.jupiter.api.Disabled;
|
||||||
import org.schabi.newpipe.downloader.DownloaderTestImpl;
|
import org.schabi.newpipe.downloader.DownloaderTestImpl;
|
||||||
import org.schabi.newpipe.downloader.MockOnly;
|
|
||||||
import org.schabi.newpipe.extractor.InfoItem;
|
import org.schabi.newpipe.extractor.InfoItem;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
@ -14,9 +10,11 @@ import org.schabi.newpipe.extractor.search.SearchExtractor;
|
|||||||
import org.schabi.newpipe.extractor.services.DefaultSearchExtractorTest;
|
import org.schabi.newpipe.extractor.services.DefaultSearchExtractorTest;
|
||||||
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
|
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import static java.util.Collections.singletonList;
|
||||||
|
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
|
||||||
|
|
||||||
// Doesn't work with mocks. Makes request with different `dataToSend` I think
|
// Doesn't work with mocks. Makes request with different `dataToSend` I think
|
||||||
public class YoutubeMusicSearchExtractorTest {
|
public class YoutubeMusicSearchExtractorTest {
|
||||||
@ -158,8 +156,8 @@ public class YoutubeMusicSearchExtractorTest {
|
|||||||
|
|
||||||
public static class CorrectedSearch extends DefaultSearchExtractorTest {
|
public static class CorrectedSearch extends DefaultSearchExtractorTest {
|
||||||
private static SearchExtractor extractor;
|
private static SearchExtractor extractor;
|
||||||
private static final String QUERY = "nocopyrigh sounds";
|
private static final String QUERY = "no copyrigh sounds";
|
||||||
private static final String EXPECTED_SUGGESTION = "nocopyrightsounds";
|
private static final String EXPECTED_SUGGESTION = "no copyright sounds";
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
public static void setUp() throws Exception {
|
public static void setUp() throws Exception {
|
||||||
|
Loading…
Reference in New Issue
Block a user