[YouTube] Support richGridRenderer on channel pages

YouTube is deploying a new layout on their channel pages, which uses richGridRenderer JSON objects.
This commit is contained in:
Theta-Dev 2022-10-12 15:29:36 +02:00 committed by AudricV
parent 4cae66f1f9
commit 20e4a35814
No known key found for this signature in database
GPG key ID: DA92EC7905614198

View file

@ -332,16 +332,20 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
Page nextPage = null; Page nextPage = null;
if (getVideoTab() != null) { if (getVideoTab() != null) {
final JsonObject gridRenderer = getVideoTab().getObject("content") final JsonObject tabContent = getVideoTab().getObject("content");
JsonArray items = tabContent
.getObject("sectionListRenderer") .getObject("sectionListRenderer")
.getArray("contents").getObject(0).getObject("itemSectionRenderer") .getArray("contents").getObject(0).getObject("itemSectionRenderer")
.getArray("contents").getObject(0).getObject("gridRenderer"); .getArray("contents").getObject(0).getObject("gridRenderer").getArray("items");
if (items.isEmpty()) {
items = tabContent.getObject("richGridRenderer").getArray("contents");
}
final List<String> channelIds = new ArrayList<>(); final List<String> channelIds = new ArrayList<>();
channelIds.add(getName()); channelIds.add(getName());
channelIds.add(getUrl()); channelIds.add(getUrl());
final JsonObject continuation = collectStreamsFrom(collector, gridRenderer final JsonObject continuation = collectStreamsFrom(collector, items, channelIds);
.getArray("items"), channelIds);
nextPage = getNextPageFrom(continuation, channelIds); nextPage = getNextPageFrom(continuation, channelIds);
} }
@ -433,6 +437,21 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
return uploaderUrl; return uploaderUrl;
} }
}); });
} else if (video.has("richItemRenderer")) {
collector.commit(new YoutubeStreamInfoItemExtractor(
video.getObject("richItemRenderer")
.getObject("content").getObject("videoRenderer"), timeAgoParser) {
@Override
public String getUploaderName() {
return uploaderName;
}
@Override
public String getUploaderUrl() {
return uploaderUrl;
}
});
} else if (video.has("continuationItemRenderer")) { } else if (video.has("continuationItemRenderer")) {
continuation = video.getObject("continuationItemRenderer"); continuation = video.getObject("continuationItemRenderer");
} }