Skip to content

Commit 0ff054a

Browse files
committed
[Youtube] Extract initial playlist info
1 parent a376792 commit 0ff054a

1 file changed

Lines changed: 83 additions & 73 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java

Lines changed: 83 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package 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;
37
import java.io.IOException;
48
import javax.annotation.Nonnull;
59
import javax.annotation.Nullable;
@@ -24,6 +28,7 @@
2428
*/
2529
public 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

Comments
 (0)