11package org .schabi .newpipe .extractor .services .youtube .extractors ;
22
3+ import static org .schabi .newpipe .extractor .services .youtube .linkHandler .YoutubeParsingHelper .getJsonResponse ;
4+
5+ import com .grack .nanojson .JsonArray ;
6+ import com .grack .nanojson .JsonObject ;
37import java .io .IOException ;
48import javax .annotation .Nonnull ;
59import javax .annotation .Nullable ;
2428 */
2529public class YoutubeMixPlaylistExtractor extends PlaylistExtractor {
2630
31+ private JsonObject initialData ;
2732 private Document doc ;
2833
2934 public YoutubeMixPlaylistExtractor (StreamingService service , ListLinkHandler linkHandler ) {
@@ -32,9 +37,14 @@ public YoutubeMixPlaylistExtractor(StreamingService service, ListLinkHandler lin
3237
3338 @ Override
3439 public void onFetchPage (@ Nonnull Downloader downloader ) throws IOException , ExtractionException {
35- final String url = getUrl ();
36- final Response response = downloader .get (url , getExtractorLocalization ());
37- doc = YoutubeParsingHelper .parseAndCheckPage (url , response );
40+ final String url = getUrl () + "&pbj=1" ;
41+ final JsonArray ajaxJson = getJsonResponse (url , getExtractorLocalization ());
42+ initialData = ajaxJson .getObject (3 ).getObject ("response" );
43+ JsonObject a = initialData .getObject ("contents" );
44+ JsonObject b = initialData .getObject ("contents" ).getObject ("twoColumnWatchNextResults" );
45+ JsonObject c = initialData .getObject ("contents" );
46+ JsonObject playlist = initialData .getObject ("contents" ).getObject ("twoColumnWatchNextResults" ).getObject ("playlist" ).getObject ("playlist" );
47+ System .out .println ();
3848 }
3949
4050 @ Nonnull
@@ -127,76 +137,76 @@ private void collectStreamsFrom(
127137 final LinkHandlerFactory streamLinkHandlerFactory = getService ().getStreamLHFactory ();
128138 final TimeAgoParser timeAgoParser = getTimeAgoParser ();
129139
130- for (final Element li : element .children ()) {
131-
132- collector .commit (new YoutubeStreamInfoItemExtractor (li , timeAgoParser ) {
133-
134- @ Override
135- public boolean isAd () {
136- return false ;
137- }
138-
139- @ Override
140- public String getUrl () throws ParsingException {
141- try {
142- return streamLinkHandlerFactory .fromId (li .attr ("data-video-id" )).getUrl ();
143- } catch (Exception e ) {
144- throw new ParsingException ("Could not get web page url for the video" , e );
145- }
146- }
147-
148- @ Override
149- public String getName () throws ParsingException {
150- try {
151- return li .attr ("data-video-title" );
152- } catch (Exception e ) {
153- throw new ParsingException ("Could not get name" , e );
154- }
155- }
156-
157- @ Override
158- public long getDuration () {
159- //Not present in doc
160- return 0 ;
161- }
162-
163- @ Override
164- public String getUploaderName () throws ParsingException {
165- String uploaderName = li .attr ("data-video-username" );
166- if (uploaderName == null || uploaderName .isEmpty ()) {
167- throw new ParsingException ("Could not get uploader name" );
168- } else {
169- return uploaderName ;
170- }
171- }
172-
173- @ Override
174- public String getUploaderUrl () {
175- //Not present in doc
176- return "" ;
177- }
178-
179- @ Override
180- public String getTextualUploadDate () {
181- //Not present in doc
182- return "" ;
183- }
184-
185- @ Override
186- public long getViewCount () {
187- return -1 ;
188- }
189-
190- @ Override
191- public String getThumbnailUrl () throws ParsingException {
192- try {
193- return getThumbnailUrlFromId (streamLinkHandlerFactory .fromUrl (getUrl ()).getId ());
194- } catch (Exception e ) {
195- throw new ParsingException ("Could not get thumbnail url" , e );
196- }
197- }
198- });
199- }
140+ // for (final Element li : element.children()) {
141+ //
142+ // collector.commit(new YoutubeStreamInfoItemExtractor(li, timeAgoParser) {
143+ //
144+ // @Override
145+ // public boolean isAd() {
146+ // return false;
147+ // }
148+ //
149+ // @Override
150+ // public String getUrl() throws ParsingException {
151+ // try {
152+ // return streamLinkHandlerFactory.fromId(li.attr("data-video-id")).getUrl();
153+ // } catch (Exception e) {
154+ // throw new ParsingException("Could not get web page url for the video", e);
155+ // }
156+ // }
157+ //
158+ // @Override
159+ // public String getName() throws ParsingException {
160+ // try {
161+ // return li.attr("data-video-title");
162+ // } catch (Exception e) {
163+ // throw new ParsingException("Could not get name", e);
164+ // }
165+ // }
166+ //
167+ // @Override
168+ // public long getDuration() {
169+ // //Not present in doc
170+ // return 0;
171+ // }
172+ //
173+ // @Override
174+ // public String getUploaderName() throws ParsingException {
175+ // String uploaderName = li.attr("data-video-username");
176+ // if (uploaderName == null || uploaderName.isEmpty()) {
177+ // throw new ParsingException("Could not get uploader name");
178+ // } else {
179+ // return uploaderName;
180+ // }
181+ // }
182+ //
183+ // @Override
184+ // public String getUploaderUrl() {
185+ // //Not present in doc
186+ // return "";
187+ // }
188+ //
189+ // @Override
190+ // public String getTextualUploadDate() {
191+ // //Not present in doc
192+ // return "";
193+ // }
194+ //
195+ // @Override
196+ // public long getViewCount() {
197+ // return -1;
198+ // }
199+ //
200+ // @Override
201+ // public String getThumbnailUrl() throws ParsingException {
202+ // try {
203+ // return getThumbnailUrlFromId(streamLinkHandlerFactory.fromUrl(getUrl()).getId());
204+ // } catch (Exception e) {
205+ // throw new ParsingException("Could not get thumbnail url", e);
206+ // }
207+ // }
208+ // });
209+ // }
200210 }
201211
202212 private String getThumbnailUrlFromId (String videoId ) {
0 commit comments