[MediaCCC] Fix link handler inconsistency providing API links

This commit is contained in:
Stypox 2020-04-09 20:25:22 +02:00
parent aeeae87641
commit b461da792f
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
5 changed files with 39 additions and 31 deletions

View File

@ -13,6 +13,7 @@ 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.linkhandler.ListLinkHandler; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import org.schabi.newpipe.extractor.services.media_ccc.extractors.infoItems.MediaCCCStreamInfoItemExtractor; import org.schabi.newpipe.extractor.services.media_ccc.extractors.infoItems.MediaCCCStreamInfoItemExtractor;
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCConferenceLinkHandlerFactory;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector; import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
@ -87,10 +88,11 @@ public class MediaCCCConferenceExtractor extends ChannelExtractor {
@Override @Override
public void onFetchPage(@Nonnull final Downloader downloader) public void onFetchPage(@Nonnull final Downloader downloader)
throws IOException, ExtractionException { throws IOException, ExtractionException {
final String conferenceUrl = MediaCCCConferenceLinkHandlerFactory.CONFERENCE_API_ENDPOINT + getId();
try { try {
conferenceData = JsonParser.object().from(downloader.get(getUrl()).responseBody()); conferenceData = JsonParser.object().from(downloader.get(conferenceUrl).responseBody());
} catch (JsonParserException jpe) { } catch (JsonParserException jpe) {
throw new ExtractionException("Could not parse json returnd by url: " + getUrl()); throw new ExtractionException("Could not parse json returnd by url: " + conferenceUrl);
} }
} }
@ -99,10 +101,4 @@ public class MediaCCCConferenceExtractor extends ChannelExtractor {
public String getName() throws ParsingException { public String getName() throws ParsingException {
return conferenceData.getString("title"); return conferenceData.getString("title");
} }
@Nonnull
@Override
public String getOriginalUrl() {
return "https://media.ccc.de/c/" + conferenceData.getString("acronym");
}
} }

View File

@ -19,6 +19,8 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
import org.schabi.newpipe.extractor.stream.StreamType; import org.schabi.newpipe.extractor.stream.StreamType;
import org.schabi.newpipe.extractor.stream.SubtitlesStream; import org.schabi.newpipe.extractor.stream.SubtitlesStream;
import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCConferenceLinkHandlerFactory;
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCStreamLinkHandlerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -93,7 +95,7 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public String getUploaderUrl() { public String getUploaderUrl() {
return data.getString("conference_url"); return MediaCCCConferenceLinkHandlerFactory.CONFERENCE_PATH + getUploaderName();
} }
@Nonnull @Nonnull
@ -111,25 +113,25 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public String getSubChannelUrl() throws ParsingException { public String getSubChannelUrl() {
return ""; return "";
} }
@Nonnull @Nonnull
@Override @Override
public String getSubChannelName() throws ParsingException { public String getSubChannelName() {
return ""; return "";
} }
@Nonnull @Nonnull
@Override @Override
public String getSubChannelAvatarUrl() throws ParsingException { public String getSubChannelAvatarUrl() {
return ""; return "";
} }
@Nonnull @Nonnull
@Override @Override
public String getDashMpdUrl() throws ParsingException { public String getDashMpdUrl() {
return ""; return "";
} }
@ -227,14 +229,13 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
@Override @Override
public void onFetchPage(@Nonnull final Downloader downloader) public void onFetchPage(@Nonnull final Downloader downloader)
throws IOException, ExtractionException { throws IOException, ExtractionException {
final String videoUrl = MediaCCCStreamLinkHandlerFactory.VIDEO_API_ENDPOINT + getId();
try { try {
data = JsonParser.object().from( data = JsonParser.object().from(downloader.get(videoUrl).responseBody());
downloader.get(getLinkHandler().getUrl()).responseBody());
conferenceData = JsonParser.object() conferenceData = JsonParser.object()
.from(downloader.get(getUploaderUrl()).responseBody()); .from(downloader.get(data.getString("conference_url")).responseBody());
} catch (JsonParserException jpe) { } catch (JsonParserException jpe) {
throw new ExtractionException("Could not parse json returned by url: " throw new ExtractionException("Could not parse json returned by url: " + videoUrl, jpe);
+ getLinkHandler().getUrl(), jpe);
} }
} }
@ -250,21 +251,25 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
return data.getString("frontend_link"); return data.getString("frontend_link");
} }
@Nonnull
@Override @Override
public String getHost() { public String getHost() {
return ""; return "";
} }
@Nonnull
@Override @Override
public String getPrivacy() { public String getPrivacy() {
return ""; return "";
} }
@Nonnull
@Override @Override
public String getCategory() { public String getCategory() {
return ""; return "";
} }
@Nonnull
@Override @Override
public String getLicence() { public String getLicence() {
return ""; return "";
@ -277,7 +282,7 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public List<String> getTags() throws ParsingException { public List<String> getTags() {
return Collections.emptyList(); return Collections.emptyList();
} }

View File

@ -7,19 +7,23 @@ import org.schabi.newpipe.extractor.utils.Parser;
import java.util.List; import java.util.List;
public class MediaCCCConferenceLinkHandlerFactory extends ListLinkHandlerFactory { public class MediaCCCConferenceLinkHandlerFactory extends ListLinkHandlerFactory {
public static final String CONFERENCE_API_ENDPOINT = "https://api.media.ccc.de/public/conferences/";
public static final String CONFERENCE_PATH = "https://media.ccc.de/c/";
@Override @Override
public String getUrl(final String id, final List<String> contentFilter, final String sortFilter) public String getUrl(final String id, final List<String> contentFilter,
throws ParsingException { final String sortFilter) throws ParsingException {
return "https://media.ccc.de/public/conferences/" + id; return CONFERENCE_PATH + id;
} }
@Override @Override
public String getId(final String url) throws ParsingException { public String getId(final String url) throws ParsingException {
if (url.startsWith("https://media.ccc.de/public/conferences/") if (url.startsWith(CONFERENCE_API_ENDPOINT)) {
|| url.startsWith("https://api.media.ccc.de/public/conferences/")) { return url.replace(CONFERENCE_API_ENDPOINT, "");
return url.replaceFirst("https://(api\\.)?media\\.ccc\\.de/public/conferences/", ""); } else if (url.startsWith("https://media.ccc.de/public/conferences/")) {
} else if (url.startsWith("https://media.ccc.de/c/")) { return url.replace("https://media.ccc.de/public/conferences/", "");
return Parser.matchGroup1("https://media.ccc.de/c/([^?#]*)", url); } else if (url.startsWith(CONFERENCE_PATH)) {
return Parser.matchGroup1(CONFERENCE_PATH + "([^?#]*)", url);
} else if (url.startsWith("https://media.ccc.de/b/")) { } else if (url.startsWith("https://media.ccc.de/b/")) {
return Parser.matchGroup1("https://media.ccc.de/b/([^?#]*)", url); return Parser.matchGroup1("https://media.ccc.de/b/([^?#]*)", url);
} }

View File

@ -8,6 +8,9 @@ import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
public class MediaCCCStreamLinkHandlerFactory extends LinkHandlerFactory { public class MediaCCCStreamLinkHandlerFactory extends LinkHandlerFactory {
public static final String VIDEO_API_ENDPOINT = "https://api.media.ccc.de/public/events/";
private static final String VIDEO_PATH = "https://media.ccc.de/v/";
@Override @Override
public String getId(final String urlString) throws ParsingException { public String getId(final String urlString) throws ParsingException {
if (urlString.startsWith("https://media.ccc.de/public/events/") if (urlString.startsWith("https://media.ccc.de/public/events/")
@ -15,7 +18,7 @@ public class MediaCCCStreamLinkHandlerFactory extends LinkHandlerFactory {
return urlString.substring(35); //remove /public/events part return urlString.substring(35); //remove /public/events part
} }
if (urlString.startsWith("https://api.media.ccc.de/public/events/") if (urlString.startsWith(VIDEO_API_ENDPOINT)
&& !urlString.contains("?q=")) { && !urlString.contains("?q=")) {
return urlString.substring(39); //remove api/public/events part return urlString.substring(39); //remove api/public/events part
} }
@ -42,7 +45,7 @@ public class MediaCCCStreamLinkHandlerFactory extends LinkHandlerFactory {
@Override @Override
public String getUrl(final String id) throws ParsingException { public String getUrl(final String id) throws ParsingException {
return "https://media.ccc.de/public/events/" + id; return VIDEO_PATH + id;
} }
@Override @Override

View File

@ -31,7 +31,7 @@ public class MediaCCCConferenceExtractorTest {
@Test @Test
public void testGetUrl() throws Exception { public void testGetUrl() throws Exception {
assertEquals("https://media.ccc.de/public/conferences/froscon2017", extractor.getUrl()); assertEquals("https://media.ccc.de/c/froscon2017", extractor.getUrl());
} }
@Test @Test
@ -67,7 +67,7 @@ public class MediaCCCConferenceExtractorTest {
@Test @Test
public void testGetUrl() throws Exception { public void testGetUrl() throws Exception {
assertEquals("https://media.ccc.de/public/conferences/oscal19", extractor.getUrl()); assertEquals("https://media.ccc.de/c/oscal19", extractor.getUrl());
} }
@Test @Test