Add bandcamp search suggestion extractor
This commit is contained in:
parent
e12ddaef7f
commit
ce2a88e56f
3 changed files with 94 additions and 5 deletions
|
@ -10,10 +10,7 @@ import org.schabi.newpipe.extractor.kiosk.KioskList;
|
||||||
import org.schabi.newpipe.extractor.linkhandler.*;
|
import org.schabi.newpipe.extractor.linkhandler.*;
|
||||||
import org.schabi.newpipe.extractor.playlist.PlaylistExtractor;
|
import org.schabi.newpipe.extractor.playlist.PlaylistExtractor;
|
||||||
import org.schabi.newpipe.extractor.search.SearchExtractor;
|
import org.schabi.newpipe.extractor.search.SearchExtractor;
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampChannelExtractor;
|
import org.schabi.newpipe.extractor.services.bandcamp.extractors.*;
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampPlaylistExtractor;
|
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampSearchExtractor;
|
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampStreamExtractor;
|
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampChannelLinkHandlerFactory;
|
import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampChannelLinkHandlerFactory;
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampPlaylistLinkHandlerFactory;
|
import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampPlaylistLinkHandlerFactory;
|
||||||
import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampSearchQueryHandlerFactory;
|
import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampSearchQueryHandlerFactory;
|
||||||
|
@ -69,7 +66,7 @@ public class BandcampService extends StreamingService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SuggestionExtractor getSuggestionExtractor() {
|
public SuggestionExtractor getSuggestionExtractor() {
|
||||||
return null;
|
return new BandcampSuggestionExtractor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
// Created by Fynn Godau 2019, licensed GNU GPL version 3 or later
|
||||||
|
|
||||||
|
package org.schabi.newpipe.extractor.services.bandcamp.extractors;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
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.suggestion.SuggestionExtractor;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampSearchQueryHandlerFactory.CHARSET_UTF_8;
|
||||||
|
|
||||||
|
public class BandcampSuggestionExtractor extends SuggestionExtractor {
|
||||||
|
|
||||||
|
private static final String AUTOCOMPLETE_URL = "https://bandcamp.com/api/fuzzysearch/1/autocomplete?q=";
|
||||||
|
public BandcampSuggestionExtractor(StreamingService service) {
|
||||||
|
super(service);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> suggestionList(String query) throws IOException, ExtractionException {
|
||||||
|
Downloader downloader = NewPipe.getDownloader();
|
||||||
|
|
||||||
|
JSONObject fuzzyResults = new JSONObject(
|
||||||
|
downloader.get(AUTOCOMPLETE_URL + URLEncoder.encode(query, CHARSET_UTF_8)).responseBody()
|
||||||
|
);
|
||||||
|
|
||||||
|
JSONArray jsonArray = fuzzyResults.getJSONObject("auto")
|
||||||
|
.getJSONArray("results");
|
||||||
|
|
||||||
|
ArrayList<String> suggestions = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < jsonArray.length(); i++) {
|
||||||
|
JSONObject fuzzyResult = jsonArray.getJSONObject(i);
|
||||||
|
String res = fuzzyResult.getString("name");
|
||||||
|
|
||||||
|
if (!suggestions.contains(res)) suggestions.add(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return suggestions;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Created by Fynn Godau 2019, licensed GNU GPL version 3 or later
|
||||||
|
|
||||||
|
package org.schabi.newpipe.extractor.services.bandcamp;
|
||||||
|
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.schabi.newpipe.DownloaderTestImpl;
|
||||||
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampSuggestionExtractor;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.schabi.newpipe.extractor.ServiceList.bandcamp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link BandcampSuggestionExtractor}
|
||||||
|
*/
|
||||||
|
public class BandcampSuggestionExtractorTest {
|
||||||
|
|
||||||
|
private static BandcampSuggestionExtractor extractor;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setUp() {
|
||||||
|
NewPipe.init(DownloaderTestImpl.getInstance());
|
||||||
|
extractor = (BandcampSuggestionExtractor) bandcamp.getSuggestionExtractor();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSearchExample() throws IOException, ExtractionException {
|
||||||
|
List<String> c418 = extractor.suggestionList("c418");
|
||||||
|
|
||||||
|
// When looking for c418, one should find C418
|
||||||
|
assertTrue(c418.contains("C418"));
|
||||||
|
|
||||||
|
// There should be five results, but we can't be sure of that forever
|
||||||
|
assertTrue(c418.size() > 2);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue