added logic for fetching related streams
This commit is contained in:
parent
bc82a53f2c
commit
b2c6928459
|
@ -1,6 +1,8 @@
|
|||
package org.schabi.newpipe.extractor.services.peertube.extractors;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
@ -17,7 +19,7 @@ import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
|||
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
|
||||
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
|
||||
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeTrendingLinkHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeSearchQueryHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.Stream;
|
||||
import org.schabi.newpipe.extractor.stream.StreamExtractor;
|
||||
|
@ -191,12 +193,36 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
@Override
|
||||
public StreamInfoItemsCollector getRelatedStreams() throws IOException, ExtractionException {
|
||||
StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
|
||||
|
||||
//TODO fetch related videos not trending
|
||||
String apiUrl = new PeertubeTrendingLinkHandlerFactory().getUrl(PeertubeTrendingLinkHandlerFactory.KIOSK_TRENDING);
|
||||
getStreamsFromApi(collector, apiUrl);
|
||||
List<String> tags = getTags();
|
||||
String apiUrl = null;
|
||||
if(!tags.isEmpty()) {
|
||||
apiUrl = getRelatedStreamsUrl(tags);
|
||||
|
||||
}else {
|
||||
apiUrl = getUploaderUrl() + "/videos?start=0&count=8";
|
||||
}
|
||||
if(!StringUtil.isBlank(apiUrl)) getStreamsFromApi(collector, apiUrl);
|
||||
return collector;
|
||||
}
|
||||
|
||||
private List<String> getTags(){
|
||||
try {
|
||||
return (List) JsonUtils.getArray(json, "tags");
|
||||
} catch (Exception e) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
private String getRelatedStreamsUrl(List<String> tags) throws UnsupportedEncodingException {
|
||||
String url = ServiceList.PeerTube.getBaseUrl() + PeertubeSearchQueryHandlerFactory.SEARCH_ENDPOINT;
|
||||
StringBuilder params = new StringBuilder();
|
||||
params.append("start=0&count=8&sort=-createdAt");
|
||||
for(String tag : tags) {
|
||||
params.append("&tagsOneOf=");
|
||||
params.append(URLEncoder.encode(tag, "UTF-8"));
|
||||
}
|
||||
return url + "?" + params.toString();
|
||||
}
|
||||
|
||||
private void getStreamsFromApi(StreamInfoItemsCollector collector, String apiUrl) throws ReCaptchaException, IOException, ParsingException {
|
||||
DownloadResponse response = getDownloader().get(apiUrl);
|
||||
|
@ -226,7 +252,8 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
if(c instanceof JsonObject) {
|
||||
final JsonObject item = (JsonObject) c;
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
|
||||
collector.commit(extractor);
|
||||
//do not add the same stream in related streams
|
||||
if(!extractor.getUrl().equals(getUrl())) collector.commit(extractor);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ public class PeertubeSearchQueryHandlerFactory extends SearchQueryHandlerFactory
|
|||
|
||||
public static final String CHARSET_UTF_8 = "UTF-8";
|
||||
public static final String VIDEOS = "videos";
|
||||
private static final String SEARCH_ENDPOINT = "/api/v1/search/videos";
|
||||
public static final String SEARCH_ENDPOINT = "/api/v1/search/videos";
|
||||
|
||||
public static PeertubeSearchQueryHandlerFactory getInstance() {
|
||||
return new PeertubeSearchQueryHandlerFactory();
|
||||
|
|
|
@ -12,6 +12,8 @@ import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
|
|||
public class PeertubeTrendingLinkHandlerFactory extends ListLinkHandlerFactory {
|
||||
|
||||
|
||||
private static final PeertubeTrendingLinkHandlerFactory instance = new PeertubeTrendingLinkHandlerFactory();
|
||||
|
||||
public static final Map<String, String> KIOSK_MAP;
|
||||
public static final Map<String, String> REVERSE_KIOSK_MAP;
|
||||
public static final String KIOSK_TRENDING = "Trending";
|
||||
|
@ -32,6 +34,10 @@ public class PeertubeTrendingLinkHandlerFactory extends ListLinkHandlerFactory {
|
|||
REVERSE_KIOSK_MAP = Collections.unmodifiableMap(reverseMap);
|
||||
}
|
||||
|
||||
public static PeertubeTrendingLinkHandlerFactory getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public String getUrl(String id, List<String> contentFilters, String sortFilter) {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return String.format(KIOSK_MAP.get(id), baseUrl);
|
||||
|
|
Loading…
Reference in New Issue