Compare commits
2 Commits
f2adc2e561
...
34e00e2492
| Author | SHA1 | Date | |
|---|---|---|---|
| 34e00e2492 | |||
| f63c620541 |
@@ -379,8 +379,8 @@ def videos(data):
|
|||||||
|
|
||||||
main_results = wdata['ec2']['contents']['twoColumnWatchNextResults']
|
main_results = wdata['ec2']['contents']['twoColumnWatchNextResults']
|
||||||
primary_results = safeTraverse(main_results, ['results', 'results', 'contents'])
|
primary_results = safeTraverse(main_results, ['results', 'results', 'contents'])
|
||||||
# video_primary_renderer = safeTraverse(primary_results, [0, 'videoPrimaryInfoRenderer'])
|
# video_primary_renderer = safeTraverse(primary_results, [..., 'videoPrimaryInfoRenderer'])
|
||||||
video_secondary_renderer = safeTraverse(primary_results, [1, 'videoSecondaryInfoRenderer'])
|
video_secondary_renderer = safeTraverse(primary_results, [..., 'videoSecondaryInfoRenderer'])
|
||||||
|
|
||||||
video_details = safeTraverse(wdata, ['ec1', 'videoDetails'])
|
video_details = safeTraverse(wdata, ['ec1', 'videoDetails'])
|
||||||
microformat = safeTraverse(wdata, ['ec1', 'microformat', 'playerMicroformatRenderer'], default={})
|
microformat = safeTraverse(wdata, ['ec1', 'microformat', 'playerMicroformatRenderer'], default={})
|
||||||
@@ -454,11 +454,15 @@ def videos(data):
|
|||||||
author = safeTraverse(video_details, ['author'], default="Unknown Author")
|
author = safeTraverse(video_details, ['author'], default="Unknown Author")
|
||||||
ucid = safeTraverse(video_details, ['channelId'], default="UNKNOWNCHANNELID")
|
ucid = safeTraverse(video_details, ['channelId'], default="UNKNOWNCHANNELID")
|
||||||
subs = ydata['channel_follower_count']
|
subs = ydata['channel_follower_count']
|
||||||
author_thumbnail = ythdd_extractor.generateChannelAvatarsFromUrl(safeTraverse(video_secondary_renderer, ['owner', 'videoOwnerRenderer', 'thumbnail', 'thumbnails', 0, 'url'], default=DEFAULT_AVATAR))
|
author_thumbnail = safeTraverse(video_secondary_renderer, ['owner', 'videoOwnerRenderer', 'thumbnail', 'thumbnails', 0, 'url'])
|
||||||
|
|
||||||
# so far it seems to be impossible to tell if a channel is verified or not,
|
|
||||||
# that is - without making another request
|
|
||||||
author_verified = ythdd_extractor.isVerified(safeTraverse(video_secondary_renderer, ['owner', 'videoOwnerRenderer', 'badges', 0], default=[]))
|
author_verified = ythdd_extractor.isVerified(safeTraverse(video_secondary_renderer, ['owner', 'videoOwnerRenderer', 'badges', 0], default=[]))
|
||||||
|
if author_thumbnail is None:
|
||||||
|
# there might be multiple authors (on a collaborative video)
|
||||||
|
# if so, then try to extract first channel's (uploader's) avatar
|
||||||
|
livm = safeTraverse(video_secondary_renderer, ["owner", "videoOwnerRenderer", "attributedTitle", "commandRuns", 0, "onTap", "innertubeCommand", "showDialogCommand", "panelLoadingStrategy", "inlineContent", "dialogViewModel", "customContent", "listViewModel", "listItems"], default=[])
|
||||||
|
author_thumbnail = safeTraverse(livm, [0, "listItemViewModel", "leadingAccessory", "avatarViewModel", "image", "sources", 0, "url"], default=DEFAULT_AVATAR)
|
||||||
|
author_verified = author_verified or safeTraverse(livm, [0, "listItemViewModel", "title", "attachmentRuns", 0, "element", "type", "imageType", "image", "sources", 0, "clientResource", "imageName"]) in ("AUDIO_BADGE", "CHECK_CIRCLE_FILLED")
|
||||||
|
author_thumbnail = ythdd_extractor.generateChannelAvatarsFromUrl(author_thumbnail)
|
||||||
|
|
||||||
format_streams = []
|
format_streams = []
|
||||||
# adaptive_formats, format_streams = rebuildFormats(adaptive_formats)
|
# adaptive_formats, format_streams = rebuildFormats(adaptive_formats)
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ def parseRenderers(entry: dict, context: dict = {}) -> dict:
|
|||||||
|
|
||||||
video_id = safeTraverse(entry, ["playlistVideoRenderer", "videoId"], default="UnknownVideoId")
|
video_id = safeTraverse(entry, ["playlistVideoRenderer", "videoId"], default="UnknownVideoId")
|
||||||
title = safeTraverse(entry, ["playlistVideoRenderer", "title", "runs", 0, "text"], default="Unknown video title")
|
title = safeTraverse(entry, ["playlistVideoRenderer", "title", "runs", 0, "text"], default="Unknown video title")
|
||||||
author_ucid = safeTraverse(entry, ["playlistVideoRenderer", "shortBylineText", "runs", 0, "navigationEndpoint", "browseEndpoint", "browseId"], default="UNKNOWNCHANNELID")
|
author_ucid = safeTraverse(entry, ["playlistVideoRenderer", "shortBylineText", "runs", 0, "navigationEndpoint", "browseEndpoint", "browseId"])
|
||||||
author_name = safeTraverse(entry, ["playlistVideoRenderer", "shortBylineText", "runs", 0, "text"], default="Unknown author")
|
author_name = safeTraverse(entry, ["playlistVideoRenderer", "shortBylineText", "runs", 0, "text"], default="Unknown author")
|
||||||
video_index = int(safeTraverse(entry, ["playlistVideoRenderer", "index", "simpleText"], default="1")) - 1
|
video_index = int(safeTraverse(entry, ["playlistVideoRenderer", "index", "simpleText"], default="1")) - 1
|
||||||
length = parseLengthFromTimeBadge(safeTraverse(entry, ["playlistVideoRenderer", "lengthText", "simpleText"], default="0:0"))
|
length = parseLengthFromTimeBadge(safeTraverse(entry, ["playlistVideoRenderer", "lengthText", "simpleText"], default="0:0"))
|
||||||
@@ -357,6 +357,20 @@ def parseRenderers(entry: dict, context: dict = {}) -> dict:
|
|||||||
if not published_date:
|
if not published_date:
|
||||||
published_date = "now"
|
published_date = "now"
|
||||||
|
|
||||||
|
if author_ucid is None:
|
||||||
|
# likely a collaborative video, let's try
|
||||||
|
# to fetch the uploader's ucid with that in mind
|
||||||
|
livm = safeTraverse(entry, ["playlistVideoRenderer", "shortBylineText", "runs", 0, "navigationEndpoint", "showDialogCommand", "panelLoadingStrategy", "inlineContent", "dialogViewModel", "customContent", "listViewModel", "listItems"], default=[])
|
||||||
|
# name extraction logic the same as in videoRenderer
|
||||||
|
all_authors = []
|
||||||
|
for collaborative_author in livm:
|
||||||
|
collaborative_author_name = safeTraverse(collaborative_author, ["listItemViewModel", "title", "content"])
|
||||||
|
if collaborative_author_name is not None:
|
||||||
|
all_authors.append(collaborative_author_name)
|
||||||
|
if all_authors != []:
|
||||||
|
author_name = ", ".join(all_authors)
|
||||||
|
author_ucid = safeTraverse(livm, [0, "listItemViewModel", "title", "commandRuns", 0, "onTap", "innertubeCommand", "browseEndpoint", "browseId"], default="UNKNOWNCHANNELID")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"type": "video",
|
"type": "video",
|
||||||
"title": title,
|
"title": title,
|
||||||
|
|||||||
Reference in New Issue
Block a user