From 0ff054acb440ff310c543f600b32b594338873c2 Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Fri, 6 Mar 2020 20:40:40 +0100 Subject: [PATCH] [Youtube] Extract initial playlist info --- .../YoutubeMixPlaylistExtractor.java | 156 ++++++++++-------- 1 file changed, 83 insertions(+), 73 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java index 9da2e98f..e9bc8162 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java @@ -1,5 +1,9 @@ package org.schabi.newpipe.extractor.services.youtube.extractors; +import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getJsonResponse; + +import com.grack.nanojson.JsonArray; +import com.grack.nanojson.JsonObject; import java.io.IOException; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -24,6 +28,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector; */ public class YoutubeMixPlaylistExtractor extends PlaylistExtractor { + private JsonObject initialData; private Document doc; public YoutubeMixPlaylistExtractor(StreamingService service, ListLinkHandler linkHandler) { @@ -32,9 +37,14 @@ public class YoutubeMixPlaylistExtractor extends PlaylistExtractor { @Override public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException { - final String url = getUrl(); - final Response response = downloader.get(url, getExtractorLocalization()); - doc = YoutubeParsingHelper.parseAndCheckPage(url, response); + final String url = getUrl() + "&pbj=1"; + final JsonArray ajaxJson = getJsonResponse(url, getExtractorLocalization()); + initialData = ajaxJson.getObject(3).getObject("response"); + JsonObject a = initialData.getObject("contents"); + JsonObject b = initialData.getObject("contents").getObject("twoColumnWatchNextResults"); + JsonObject c = initialData.getObject("contents"); + JsonObject playlist = initialData.getObject("contents").getObject("twoColumnWatchNextResults").getObject("playlist").getObject("playlist"); + System.out.println(); } @Nonnull @@ -127,76 +137,76 @@ public class YoutubeMixPlaylistExtractor extends PlaylistExtractor { final LinkHandlerFactory streamLinkHandlerFactory = getService().getStreamLHFactory(); final TimeAgoParser timeAgoParser = getTimeAgoParser(); - for (final Element li : element.children()) { - - collector.commit(new YoutubeStreamInfoItemExtractor(li, timeAgoParser) { - - @Override - public boolean isAd() { - return false; - } - - @Override - public String getUrl() throws ParsingException { - try { - return streamLinkHandlerFactory.fromId(li.attr("data-video-id")).getUrl(); - } catch (Exception e) { - throw new ParsingException("Could not get web page url for the video", e); - } - } - - @Override - public String getName() throws ParsingException { - try { - return li.attr("data-video-title"); - } catch (Exception e) { - throw new ParsingException("Could not get name", e); - } - } - - @Override - public long getDuration() { - //Not present in doc - return 0; - } - - @Override - public String getUploaderName() throws ParsingException { - String uploaderName = li.attr("data-video-username"); - if (uploaderName == null || uploaderName.isEmpty()) { - throw new ParsingException("Could not get uploader name"); - } else { - return uploaderName; - } - } - - @Override - public String getUploaderUrl() { - //Not present in doc - return ""; - } - - @Override - public String getTextualUploadDate() { - //Not present in doc - return ""; - } - - @Override - public long getViewCount() { - return -1; - } - - @Override - public String getThumbnailUrl() throws ParsingException { - try { - return getThumbnailUrlFromId(streamLinkHandlerFactory.fromUrl(getUrl()).getId()); - } catch (Exception e) { - throw new ParsingException("Could not get thumbnail url", e); - } - } - }); - } +// for (final Element li : element.children()) { +// +// collector.commit(new YoutubeStreamInfoItemExtractor(li, timeAgoParser) { +// +// @Override +// public boolean isAd() { +// return false; +// } +// +// @Override +// public String getUrl() throws ParsingException { +// try { +// return streamLinkHandlerFactory.fromId(li.attr("data-video-id")).getUrl(); +// } catch (Exception e) { +// throw new ParsingException("Could not get web page url for the video", e); +// } +// } +// +// @Override +// public String getName() throws ParsingException { +// try { +// return li.attr("data-video-title"); +// } catch (Exception e) { +// throw new ParsingException("Could not get name", e); +// } +// } +// +// @Override +// public long getDuration() { +// //Not present in doc +// return 0; +// } +// +// @Override +// public String getUploaderName() throws ParsingException { +// String uploaderName = li.attr("data-video-username"); +// if (uploaderName == null || uploaderName.isEmpty()) { +// throw new ParsingException("Could not get uploader name"); +// } else { +// return uploaderName; +// } +// } +// +// @Override +// public String getUploaderUrl() { +// //Not present in doc +// return ""; +// } +// +// @Override +// public String getTextualUploadDate() { +// //Not present in doc +// return ""; +// } +// +// @Override +// public long getViewCount() { +// return -1; +// } +// +// @Override +// public String getThumbnailUrl() throws ParsingException { +// try { +// return getThumbnailUrlFromId(streamLinkHandlerFactory.fromUrl(getUrl()).getId()); +// } catch (Exception e) { +// throw new ParsingException("Could not get thumbnail url", e); +// } +// } +// }); +// } } private String getThumbnailUrlFromId(String videoId) {