[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:
parent
4cae66f1f9
commit
20e4a35814
1 changed files with 23 additions and 4 deletions
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue