package org.schabi.newpipe.extractor.services.soundcloud.linkHandler; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory; import org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper; import org.schabi.newpipe.extractor.utils.Parser; import org.schabi.newpipe.extractor.utils.Utils; public final class SoundcloudStreamLinkHandlerFactory extends LinkHandlerFactory { private static final SoundcloudStreamLinkHandlerFactory INSTANCE = new SoundcloudStreamLinkHandlerFactory(); private static final String URL_PATTERN = "^https?://(www\\.|m\\.)?soundcloud.com/[0-9a-z_-]+" + "/(?!(tracks|albums|sets|reposts|followers|following)/?$)[0-9a-z_-]+/?([#?].*)?$"; private static final String API_URL_PATTERN = "^https?://api-v2\\.soundcloud.com" + "/(tracks|albums|sets|reposts|followers|following)/([0-9a-z_-]+)/"; private SoundcloudStreamLinkHandlerFactory() { } public static SoundcloudStreamLinkHandlerFactory getInstance() { return INSTANCE; } @Override public String getUrl(final String id) throws ParsingException { try { return SoundcloudParsingHelper.resolveUrlWithEmbedPlayer( "https://api.soundcloud.com/tracks/" + id); } catch (final Exception e) { throw new ParsingException(e.getMessage(), e); } } @Override public String getId(final String url) throws ParsingException { if (Parser.isMatch(API_URL_PATTERN, url)) { return Parser.matchGroup(API_URL_PATTERN, url, 2); } Utils.checkUrl(URL_PATTERN, url); try { return SoundcloudParsingHelper.resolveIdWithWidgetApi(url); } catch (final Exception e) { throw new ParsingException(e.getMessage(), e); } } @Override public boolean onAcceptUrl(final String url) throws ParsingException { return Parser.isMatch(URL_PATTERN, url.toLowerCase()); } }