2017-08-04 16:21:45 +02:00
|
|
|
package org.schabi.newpipe.extractor.services.soundcloud;
|
|
|
|
|
|
|
|
import org.jsoup.Jsoup;
|
|
|
|
import org.jsoup.nodes.Element;
|
2018-05-05 20:07:47 +02:00
|
|
|
import org.schabi.newpipe.extractor.ListUrlIdHandler;
|
2017-08-04 16:21:45 +02:00
|
|
|
import org.schabi.newpipe.extractor.NewPipe;
|
|
|
|
import org.schabi.newpipe.extractor.UrlIdHandler;
|
|
|
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
|
|
|
import org.schabi.newpipe.extractor.utils.Parser;
|
2017-08-08 17:01:50 +02:00
|
|
|
import org.schabi.newpipe.extractor.utils.Utils;
|
2017-08-04 16:21:45 +02:00
|
|
|
|
2018-03-04 21:30:31 +01:00
|
|
|
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
|
|
|
|
2018-05-05 20:07:47 +02:00
|
|
|
public class SoundcloudChannelUrlIdHandler extends ListUrlIdHandler {
|
2017-08-11 03:23:09 +02:00
|
|
|
private static final SoundcloudChannelUrlIdHandler instance = new SoundcloudChannelUrlIdHandler();
|
2018-01-20 18:48:15 +01:00
|
|
|
private final String URL_PATTERN = "^https?://(www\\.|m\\.)?soundcloud.com/[0-9a-z_-]+" +
|
2017-08-08 17:01:50 +02:00
|
|
|
"(/((tracks|albums|sets|reposts|followers|following)/?)?)?([#?].*)?$";
|
2017-08-04 16:21:45 +02:00
|
|
|
|
2017-08-11 03:23:09 +02:00
|
|
|
public static SoundcloudChannelUrlIdHandler getInstance() {
|
2017-08-04 16:21:45 +02:00
|
|
|
return instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-05-05 20:07:47 +02:00
|
|
|
public String getUrl(String id, String[] contentFilter, String sortFilter) throws ParsingException {
|
2017-08-04 16:21:45 +02:00
|
|
|
try {
|
2017-08-07 18:12:51 +02:00
|
|
|
return SoundcloudParsingHelper.resolveUrlWithEmbedPlayer("https://api.soundcloud.com/users/" + id);
|
2017-08-04 16:21:45 +02:00
|
|
|
} catch (Exception e) {
|
|
|
|
throw new ParsingException(e.getMessage(), e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-06 22:20:15 +02:00
|
|
|
public String getId(String url) throws ParsingException {
|
2017-08-08 17:01:50 +02:00
|
|
|
Utils.checkUrl(URL_PATTERN, url);
|
|
|
|
|
2017-08-04 16:21:45 +02:00
|
|
|
try {
|
2017-08-06 22:20:15 +02:00
|
|
|
return SoundcloudParsingHelper.resolveIdWithEmbedPlayer(url);
|
2017-08-04 16:21:45 +02:00
|
|
|
} catch (Exception e) {
|
|
|
|
throw new ParsingException(e.getMessage(), e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-06 22:20:15 +02:00
|
|
|
public String cleanUrl(String complexUrl) throws ParsingException {
|
2017-08-08 17:01:50 +02:00
|
|
|
Utils.checkUrl(URL_PATTERN, complexUrl);
|
|
|
|
|
2017-08-04 16:21:45 +02:00
|
|
|
try {
|
2017-08-06 22:20:15 +02:00
|
|
|
Element ogElement = Jsoup.parse(NewPipe.getDownloader().download(complexUrl))
|
|
|
|
.select("meta[property=og:url]").first();
|
2017-08-04 16:21:45 +02:00
|
|
|
|
2018-03-04 21:30:31 +01:00
|
|
|
return replaceHttpWithHttps(ogElement.attr("content"));
|
2017-08-04 16:21:45 +02:00
|
|
|
} catch (Exception e) {
|
|
|
|
throw new ParsingException(e.getMessage(), e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-07 18:12:51 +02:00
|
|
|
public boolean acceptUrl(String url) {
|
2017-08-08 17:01:50 +02:00
|
|
|
return Parser.isMatch(URL_PATTERN, url.toLowerCase());
|
2017-08-04 16:21:45 +02:00
|
|
|
}
|
|
|
|
}
|