Skip to content

Commit e8d58e0

Browse files
committed
getSearchSuggestion now returns the corrected query if isCorrectedSearch() is true
1 parent 5d1c3b3 commit e8d58e0

8 files changed

Lines changed: 54 additions & 15 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/search/SearchExtractor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ public String getSearchString() {
2525
return getLinkHandler().getSearchString();
2626
}
2727

28+
/**
29+
* The search suggestion provided by the service.
30+
* <p>
31+
* This method may also return the corrected query,
32+
* see {@link SearchExtractor#isCorrectedSearch()}.
33+
*
34+
* @return a suggestion to another query, the corrected query, or an empty String.
35+
* @throws ParsingException
36+
*/
37+
@Nonnull
2838
public abstract String getSearchSuggestion() throws ParsingException;
2939

3040
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.schabi.newpipe.extractor.channel.ChannelInfoItemExtractor;
1212
import org.schabi.newpipe.extractor.downloader.Downloader;
1313
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
14+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1415
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
1516
import org.schabi.newpipe.extractor.search.InfoItemsSearchCollector;
1617
import org.schabi.newpipe.extractor.search.SearchExtractor;
@@ -42,9 +43,10 @@ public MediaCCCSearchExtractor(final StreamingService service,
4243
}
4344
}
4445

46+
@Nonnull
4547
@Override
46-
public String getSearchSuggestion() {
47-
return null;
48+
public String getSearchSuggestion() throws ParsingException {
49+
return "";
4850
}
4951

5052
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.schabi.newpipe.extractor.utils.Parser;
2020
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
2121

22+
import javax.annotation.Nonnull;
2223
import java.io.IOException;
2324

2425
public class PeertubeSearchExtractor extends SearchExtractor {
@@ -35,9 +36,10 @@ public PeertubeSearchExtractor(StreamingService service, SearchQueryHandler link
3536
super(service, linkHandler);
3637
}
3738

39+
@Nonnull
3840
@Override
3941
public String getSearchSuggestion() throws ParsingException {
40-
return null;
42+
return "";
4143
}
4244

4345
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSearchExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ public SoundcloudSearchExtractor(StreamingService service, SearchQueryHandler li
3333
super(service, linkHandler);
3434
}
3535

36+
@Nonnull
3637
@Override
3738
public String getSearchSuggestion() {
38-
return null;
39+
return "";
3940
}
4041

4142
@Override

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

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.schabi.newpipe.extractor.search.InfoItemsSearchCollector;
1919
import org.schabi.newpipe.extractor.search.SearchExtractor;
2020
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
21+
import org.schabi.newpipe.extractor.utils.JsonUtils;
2122
import org.schabi.newpipe.extractor.utils.Utils;
2223

2324
import java.io.IOException;
@@ -124,15 +125,27 @@ public String getUrl() throws ParsingException {
124125
return super.getUrl();
125126
}
126127

128+
@Nonnull
127129
@Override
128130
public String getSearchSuggestion() throws ParsingException {
129-
final JsonObject didYouMeanRenderer = initialData.getObject("contents").getObject("sectionListRenderer")
130-
.getArray("contents").getObject(0).getObject("itemSectionRenderer")
131-
.getArray("contents").getObject(0).getObject("didYouMeanRenderer");
132-
if (!didYouMeanRenderer.has("correctedQuery")) {
131+
final JsonObject itemSectionRenderer = initialData.getObject("contents").getObject("sectionListRenderer")
132+
.getArray("contents").getObject(0).getObject("itemSectionRenderer");
133+
if (itemSectionRenderer == null) {
134+
return "";
135+
}
136+
137+
final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents")
138+
.getObject(0).getObject("didYouMeanRenderer");
139+
final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents").getObject(0)
140+
.getObject("showingResultsForRenderer");
141+
142+
if (didYouMeanRenderer != null) {
143+
return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery"));
144+
} else if (showingResultsForRenderer != null) {
145+
return JsonUtils.getString(showingResultsForRenderer, "correctedQueryEndpoint.searchEndpoint.query");
146+
} else {
133147
return "";
134148
}
135-
return getTextFromObject(didYouMeanRenderer.getObject("correctedQuery"));
136149
}
137150

138151
@Override

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,25 @@ public String getUrl() throws ParsingException {
6161
return super.getUrl() + "&gl=" + getExtractorContentCountry().getCountryCode();
6262
}
6363

64+
@Nonnull
6465
@Override
6566
public String getSearchSuggestion() throws ParsingException {
66-
final JsonObject didYouMeanRenderer = initialData.getObject("contents")
67+
final JsonObject itemSectionRenderer = initialData.getObject("contents")
6768
.getObject("twoColumnSearchResultsRenderer").getObject("primaryContents")
6869
.getObject("sectionListRenderer").getArray("contents").getObject(0)
69-
.getObject("itemSectionRenderer").getArray("contents").getObject(0)
70+
.getObject("itemSectionRenderer");
71+
final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents").getObject(0)
7072
.getObject("didYouMeanRenderer");
71-
if (didYouMeanRenderer == null) {
73+
final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents").getObject(0)
74+
.getObject("showingResultsForRenderer");
75+
76+
if (didYouMeanRenderer != null) {
77+
return JsonUtils.getString(didYouMeanRenderer, "correctedQueryEndpoint.searchEndpoint.query");
78+
} else if (showingResultsForRenderer != null) {
79+
return getTextFromObject(showingResultsForRenderer.getObject("correctedQuery"));
80+
} else {
7281
return "";
7382
}
74-
return JsonUtils.getString(didYouMeanRenderer, "correctedQueryEndpoint.searchEndpoint.query");
7583
}
7684

7785
@Override

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ public static void setUp() throws Exception {
154154
public static class CorrectedSearch extends DefaultSearchExtractorTest {
155155
private static SearchExtractor extractor;
156156
private static final String QUERY = "duo lipa";
157+
private static final String EXPECTED_SUGGESTION = "dua lipa";
157158

158159
@BeforeClass
159160
public static void setUp() throws Exception {
@@ -169,7 +170,7 @@ public static void setUp() throws Exception {
169170
@Override public String expectedUrlContains() { return "music.youtube.com/search?q=" + URLEncoder.encode(QUERY); }
170171
@Override public String expectedOriginalUrlContains() { return "music.youtube.com/search?q=" + URLEncoder.encode(QUERY); }
171172
@Override public String expectedSearchString() { return QUERY; }
172-
@Nullable @Override public String expectedSearchSuggestion() { return null; }
173+
@Nullable @Override public String expectedSearchSuggestion() { return EXPECTED_SUGGESTION; }
173174
@Override public InfoItem.InfoType expectedInfoItemType() { return InfoItem.InfoType.STREAM; }
174175
@Override public boolean isCorrectedSearch() { return true; }
175176
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.schabi.newpipe.extractor.ListExtractor;
88
import org.schabi.newpipe.extractor.NewPipe;
99
import org.schabi.newpipe.extractor.StreamingService;
10+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1011
import org.schabi.newpipe.extractor.search.SearchExtractor;
1112
import org.schabi.newpipe.extractor.services.DefaultSearchExtractorTest;
1213

@@ -138,6 +139,7 @@ public static void setUp() throws Exception {
138139
public static class CorrectedSearch extends DefaultSearchExtractorTest {
139140
private static SearchExtractor extractor;
140141
private static final String QUERY = "pewdeipie";
142+
private static final String EXPECTED_SUGGESTION = "pewdiepie";
141143

142144
@BeforeClass
143145
public static void setUp() throws Exception {
@@ -153,7 +155,7 @@ public static void setUp() throws Exception {
153155
@Override public String expectedUrlContains() { return "youtube.com/results?search_query=" + QUERY; }
154156
@Override public String expectedOriginalUrlContains() { return "youtube.com/results?search_query=" + QUERY; }
155157
@Override public String expectedSearchString() { return QUERY; }
156-
@Nullable @Override public String expectedSearchSuggestion() { return null; }
158+
@Nullable @Override public String expectedSearchSuggestion() { return EXPECTED_SUGGESTION; }
157159
@Override public InfoItem.InfoType expectedInfoItemType() { return InfoItem.InfoType.STREAM; }
158160
@Override public boolean isCorrectedSearch() { return true; }
159161
}

0 commit comments

Comments
 (0)