mirror of
https://github.com/TeamNewPipe/NewPipeExtractor.git
synced 2025-04-27 23:40:36 +05:30
62 lines
2.3 KiB
Java
62 lines
2.3 KiB
Java
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;
|
|
}
|
|
}
|