[SoundCloud] Deduplicate some code

This commit is contained in:
TobiGr 2023-08-03 14:37:08 +02:00
parent 2fb9922a15
commit aa6c17dc77
2 changed files with 24 additions and 41 deletions

View File

@ -1,14 +1,9 @@
package org.schabi.newpipe.extractor.services.soundcloud; package org.schabi.newpipe.extractor.services.soundcloud;
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonArray;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonParser; import com.grack.nanojson.JsonParser;
import com.grack.nanojson.JsonParserException; import com.grack.nanojson.JsonParserException;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
@ -28,6 +23,7 @@ import org.schabi.newpipe.extractor.utils.Parser;
import org.schabi.newpipe.extractor.utils.Parser.RegexException; import org.schabi.newpipe.extractor.utils.Parser.RegexException;
import org.schabi.newpipe.extractor.utils.Utils; import org.schabi.newpipe.extractor.utils.Utils;
import javax.annotation.Nonnull;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
@ -38,7 +34,9 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Nonnull; import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
public final class SoundcloudParsingHelper { public final class SoundcloudParsingHelper {
private static String clientId; private static String clientId;
@ -200,6 +198,7 @@ public final class SoundcloudParsingHelper {
* *
* @return the next streams url, empty if don't have * @return the next streams url, empty if don't have
*/ */
@Nonnull
public static String getUsersFromApi(final ChannelInfoItemsCollector collector, public static String getUsersFromApi(final ChannelInfoItemsCollector collector,
final String apiUrl) throws IOException, final String apiUrl) throws IOException,
ReCaptchaException, ParsingException { ReCaptchaException, ParsingException {
@ -221,17 +220,7 @@ public final class SoundcloudParsingHelper {
} }
} }
String nextPageUrl; return getNextPageUrl(responseObject);
try {
nextPageUrl = responseObject.getString("next_href");
if (!nextPageUrl.contains("client_id=")) {
nextPageUrl += "&client_id=" + SoundcloudParsingHelper.clientId();
}
} catch (final Exception ignored) {
nextPageUrl = "";
}
return nextPageUrl;
} }
/** /**
@ -261,6 +250,7 @@ public final class SoundcloudParsingHelper {
* *
* @return the next streams url, empty if don't have * @return the next streams url, empty if don't have
*/ */
@Nonnull
public static String getStreamsFromApi(final StreamInfoItemsCollector collector, public static String getStreamsFromApi(final StreamInfoItemsCollector collector,
final String apiUrl, final String apiUrl,
final boolean charts) throws IOException, final boolean charts) throws IOException,
@ -288,17 +278,20 @@ public final class SoundcloudParsingHelper {
} }
} }
String nextPageUrl; return getNextPageUrl(responseObject);
}
@Nonnull
private static String getNextPageUrl(@Nonnull final JsonObject response) {
try { try {
nextPageUrl = responseObject.getString("next_href"); String nextPageUrl = response.getString("next_href");
if (!nextPageUrl.contains("client_id=")) { if (!nextPageUrl.contains("client_id=")) {
nextPageUrl += "&client_id=" + SoundcloudParsingHelper.clientId(); nextPageUrl += "&client_id=" + SoundcloudParsingHelper.clientId();
} }
return nextPageUrl;
} catch (final Exception ignored) { } catch (final Exception ignored) {
nextPageUrl = ""; return "";
} }
return nextPageUrl;
} }
public static String getStreamsFromApi(final StreamInfoItemsCollector collector, public static String getStreamsFromApi(final StreamInfoItemsCollector collector,

View File

@ -15,6 +15,7 @@ import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.extractor.downloader.Response; import org.schabi.newpipe.extractor.downloader.Response;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import java.io.IOException; import java.io.IOException;
@ -33,22 +34,7 @@ public class SoundcloudCommentsExtractor extends CommentsExtractor {
@Override @Override
public InfoItemsPage<CommentsInfoItem> getInitialPage() throws ExtractionException, public InfoItemsPage<CommentsInfoItem> getInitialPage() throws ExtractionException,
IOException { IOException {
final Downloader downloader = NewPipe.getDownloader(); return getPage(getUrl());
final Response response = downloader.get(getUrl());
final JsonObject json;
try {
json = JsonParser.object().from(response.responseBody());
} catch (final JsonParserException e) {
throw new ParsingException("Could not parse json", e);
}
final CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector(
getServiceId());
collectStreamsFrom(collector, json.getArray("collection"));
return new InfoItemsPage<>(collector, new Page(json.getString("next_href")));
} }
@Override @Override
@ -57,9 +43,14 @@ public class SoundcloudCommentsExtractor extends CommentsExtractor {
if (page == null || isNullOrEmpty(page.getUrl())) { if (page == null || isNullOrEmpty(page.getUrl())) {
throw new IllegalArgumentException("Page doesn't contain an URL"); throw new IllegalArgumentException("Page doesn't contain an URL");
} }
return getPage(page.getUrl());
}
@Nonnull
private InfoItemsPage<CommentsInfoItem> getPage(@Nonnull final String url)
throws ParsingException, IOException, ReCaptchaException {
final Downloader downloader = NewPipe.getDownloader(); final Downloader downloader = NewPipe.getDownloader();
final Response response = downloader.get(page.getUrl()); final Response response = downloader.get(url);
final JsonObject json; final JsonObject json;
try { try {
@ -72,8 +63,7 @@ public class SoundcloudCommentsExtractor extends CommentsExtractor {
getServiceId()); getServiceId());
collectStreamsFrom(collector, json.getArray("collection")); collectStreamsFrom(collector, json.getArray("collection"));
return new InfoItemsPage<>(collector, new Page(json.getString("next_href", null)));
return new InfoItemsPage<>(collector, new Page(json.getString("next_href")));
} }
@Override @Override