61
services/soundcloud/SoundcloudSearchEngine.java
Normal file
61
services/soundcloud/SoundcloudSearchEngine.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package org.schabi.newpipe.extractor.services.soundcloud;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.schabi.newpipe.extractor.Downloader;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.search.InfoItemSearchCollector;
|
||||
import org.schabi.newpipe.extractor.search.SearchEngine;
|
||||
|
||||
public class SoundcloudSearchEngine extends SearchEngine {
|
||||
public static final String CHARSET_UTF_8 = "UTF-8";
|
||||
|
||||
public SoundcloudSearchEngine(int serviceId) {
|
||||
super(serviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InfoItemSearchCollector search(String query, int page, String languageCode, EnumSet<Filter> filter) throws IOException, ExtractionException {
|
||||
InfoItemSearchCollector collector = getInfoItemSearchCollector();
|
||||
|
||||
Downloader downloader = NewPipe.getDownloader();
|
||||
|
||||
String url = "https://api-v2.soundcloud.com/search";
|
||||
|
||||
if (filter.contains(Filter.STREAM) && !filter.contains(Filter.CHANNEL)) {
|
||||
url += "/tracks";
|
||||
} else if (!filter.contains(Filter.STREAM) && filter.contains(Filter.CHANNEL)) {
|
||||
url += "/users";
|
||||
}
|
||||
|
||||
url += "?q=" + URLEncoder.encode(query, CHARSET_UTF_8)
|
||||
+ "&client_id=" + SoundcloudParsingHelper.clientId()
|
||||
+ "&limit=10"
|
||||
+ "&offset=" + Integer.toString(page * 10);
|
||||
|
||||
String searchJson = downloader.download(url);
|
||||
JSONObject search = new JSONObject(searchJson);
|
||||
JSONArray searchCollection = search.getJSONArray("collection");
|
||||
|
||||
if (searchCollection.length() == 0) {
|
||||
throw new NothingFoundException("Nothing found");
|
||||
}
|
||||
|
||||
for (int i = 0; i < searchCollection.length(); i++) {
|
||||
JSONObject searchResult = searchCollection.getJSONObject(i);
|
||||
String kind = searchResult.getString("kind");
|
||||
if (kind.equals("user")) {
|
||||
collector.commit(new SoundcloudChannelInfoItemExtractor(searchResult));
|
||||
} else if (kind.equals("track")) {
|
||||
collector.commit(new SoundcloudStreamInfoItemExtractor(searchResult));
|
||||
}
|
||||
}
|
||||
|
||||
return collector;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user