Skip to content

Commit d1a0686

Browse files
committed
[media.ccc.de] Get conference name from API URL
1 parent 4169979 commit d1a0686

2 files changed

Lines changed: 41 additions & 5 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKiosk.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.grack.nanojson.JsonObject;
55
import com.grack.nanojson.JsonParser;
66
import com.grack.nanojson.JsonParserException;
7+
78
import org.schabi.newpipe.extractor.Page;
89
import org.schabi.newpipe.extractor.StreamingService;
910
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -14,12 +15,16 @@
1415
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
1516
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
1617

17-
import javax.annotation.Nonnull;
1818
import java.io.IOException;
19+
import java.util.HashMap;
20+
import java.util.Map;
21+
22+
import javax.annotation.Nonnull;
1923

2024
public class MediaCCCRecentKiosk extends KioskExtractor<StreamInfoItem> {
2125

2226
private JsonObject doc;
27+
private final Map<String, String> conferenceNames = new HashMap<>();
2328

2429
public MediaCCCRecentKiosk(StreamingService streamingService, ListLinkHandler linkHandler, String kioskId) {
2530
super(streamingService, linkHandler, kioskId);
@@ -41,8 +46,9 @@ public void onFetchPage(@Nonnull Downloader downloader) throws IOException, Extr
4146
public InfoItemsPage<StreamInfoItem> getInitialPage() throws IOException, ExtractionException {
4247
final JsonArray events = doc.getArray("events");
4348
StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
49+
4450
for (int i = 0; i < events.size(); i++) {
45-
collector.commit(new MediaCCCRecentKioskExtractor(events.getObject(i)));
51+
collector.commit(new MediaCCCRecentKioskExtractor(events.getObject(i), conferenceNames));
4652
}
4753
return new InfoItemsPage<>(collector, null);
4854
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,34 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.extractors;
22

33
import com.grack.nanojson.JsonObject;
4+
5+
import org.schabi.newpipe.extractor.ServiceList;
6+
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
7+
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
48
import org.schabi.newpipe.extractor.exceptions.ParsingException;
59
import org.schabi.newpipe.extractor.localization.DateWrapper;
610
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCConferenceLinkHandlerFactory;
711
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
812
import org.schabi.newpipe.extractor.stream.StreamType;
913

10-
import javax.annotation.Nullable;
14+
import java.io.IOException;
1115
import java.time.ZonedDateTime;
1216
import java.time.format.DateTimeFormatter;
17+
import java.util.Map;
18+
19+
import javax.annotation.Nullable;
20+
21+
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
1322

1423
public class MediaCCCRecentKioskExtractor implements StreamInfoItemExtractor {
1524

1625
private final JsonObject event;
26+
private final Map<String, String> conferenceNames;
1727

18-
public MediaCCCRecentKioskExtractor(final JsonObject event) {
28+
public MediaCCCRecentKioskExtractor(final JsonObject event,
29+
final Map<String, String> conferenceNames) {
1930
this.event = event;
31+
this.conferenceNames = conferenceNames;
2032
}
2133

2234
@Override
@@ -56,7 +68,25 @@ public long getViewCount() throws ParsingException {
5668

5769
@Override
5870
public String getUploaderName() throws ParsingException {
59-
return "";
71+
final String conferenceApiUrl = event.getString("conference_url");
72+
if (isNullOrEmpty(conferenceApiUrl)) {
73+
throw new ParsingException("conference url is empty");
74+
}
75+
76+
if (conferenceNames.containsKey(conferenceApiUrl)) {
77+
return conferenceNames.get(conferenceApiUrl);
78+
}
79+
80+
// get conference name from API.
81+
try {
82+
ChannelExtractor extractor = ServiceList.MediaCCC.getChannelExtractor(
83+
new MediaCCCConferenceLinkHandlerFactory().fromUrl(conferenceApiUrl));
84+
extractor.fetchPage();
85+
conferenceNames.put(conferenceApiUrl, extractor.getName());
86+
return extractor.getName();
87+
} catch (IOException | ExtractionException e) {
88+
throw new ParsingException("Could not get conference name from conference API URL", e);
89+
}
6090
}
6191

6292
@Override

0 commit comments

Comments
 (0)