mirror of
https://github.com/TeamNewPipe/NewPipeExtractor.git
synced 2025-04-27 23:40:36 +05:30
119 lines
4.1 KiB
Java
119 lines
4.1 KiB
Java
package org.schabi.newpipe.extractor.services.soundcloud;
|
|
|
|
import java.io.IOException;
|
|
|
|
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.UrlIdHandler;
|
|
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
|
|
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.stream.StreamInfoItemCollector;
|
|
|
|
@SuppressWarnings("WeakerAccess")
|
|
public class SoundcloudChannelExtractor extends ChannelExtractor {
|
|
private String channelId;
|
|
private JSONObject channel;
|
|
private String nextUrl;
|
|
|
|
public SoundcloudChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
|
super(urlIdHandler, url, serviceId);
|
|
|
|
Downloader dl = NewPipe.getDownloader();
|
|
|
|
channelId = urlIdHandler.getId(url);
|
|
String apiUrl = "https://api-v2.soundcloud.com/users/" + channelId
|
|
+ "?client_id=" + SoundcloudParsingHelper.clientId();
|
|
|
|
String response = dl.download(apiUrl);
|
|
channel = new JSONObject(response);
|
|
}
|
|
|
|
@Override
|
|
public String getChannelId() {
|
|
return channelId;
|
|
}
|
|
|
|
@Override
|
|
public String getChannelName() {
|
|
return channel.getString("username");
|
|
}
|
|
|
|
@Override
|
|
public String getAvatarUrl() {
|
|
return channel.getString("avatar_url");
|
|
}
|
|
|
|
@Override
|
|
public String getBannerUrl() throws ParsingException {
|
|
try {
|
|
return channel.getJSONObject("visuals").getJSONArray("visuals").getJSONObject(0).getString("visual_url");
|
|
} catch (Exception e) {
|
|
throw new ParsingException("Could not get Banner", e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public StreamInfoItemCollector getStreams() throws ReCaptchaException, IOException, ParsingException {
|
|
StreamInfoItemCollector collector = getStreamPreviewInfoCollector();
|
|
Downloader dl = NewPipe.getDownloader();
|
|
|
|
String apiUrl = "https://api-v2.soundcloud.com/users/" + channelId + "/tracks"
|
|
+ "?client_id=" + SoundcloudParsingHelper.clientId()
|
|
+ "&limit=10"
|
|
+ "&offset=0"
|
|
+ "&linked_partitioning=1";
|
|
|
|
String response = dl.download(apiUrl);
|
|
JSONObject responseObject = new JSONObject(response);
|
|
|
|
nextUrl = responseObject.getString("next_href")
|
|
+ "&client_id=" + SoundcloudParsingHelper.clientId()
|
|
+ "&linked_partitioning=1";
|
|
|
|
JSONArray responseCollection = responseObject.getJSONArray("collection");
|
|
for (int i = 0; i < responseCollection.length(); i++) {
|
|
JSONObject track = responseCollection.getJSONObject(i);
|
|
collector.commit(new SoundcloudStreamInfoItemExtractor(track));
|
|
}
|
|
return collector;
|
|
}
|
|
|
|
@Override
|
|
public long getSubscriberCount() {
|
|
return channel.getLong("followers_count");
|
|
}
|
|
|
|
@Override
|
|
public String getFeedUrl() throws ParsingException {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException {
|
|
if (nextUrl.equals("")) {
|
|
throw new ExtractionException("Channel doesn't have more streams");
|
|
}
|
|
|
|
StreamInfoItemCollector collector = getStreamPreviewInfoCollector();
|
|
Downloader dl = NewPipe.getDownloader();
|
|
|
|
String response = dl.download(nextUrl);
|
|
JSONObject responseObject = new JSONObject(response);
|
|
|
|
nextUrl = responseObject.getString("next_href")
|
|
+ "&client_id=" + SoundcloudParsingHelper.clientId()
|
|
+ "&linked_partitioning=1";
|
|
|
|
JSONArray responseCollection = responseObject.getJSONArray("collection");
|
|
for (int i = 0; i < responseCollection.length(); i++) {
|
|
JSONObject track = responseCollection.getJSONObject(i);
|
|
collector.commit(new SoundcloudStreamInfoItemExtractor(track));
|
|
}
|
|
return collector;
|
|
}
|
|
}
|