add owner badges for related videos, use short text for text view count
This commit is contained in:
@@ -188,7 +188,7 @@ def videos(data):
|
|||||||
title = safeTraverse(video_details, ['title'], default=video_id)
|
title = safeTraverse(video_details, ['title'], default=video_id)
|
||||||
views = int(safeTraverse(video_details, ['viewCount'], default=0))
|
views = int(safeTraverse(video_details, ['viewCount'], default=0))
|
||||||
length = int(safeTraverse(video_details, ['lengthSeconds'], default=1))
|
length = int(safeTraverse(video_details, ['lengthSeconds'], default=1))
|
||||||
published = datetime.datetime.fromisoformat(safeTraverse(microformat, ['publishDate'], default="2004-10-29T10:30:00-07:00")).timestamp() # ISO format to Unix timestamp
|
published = datetime.datetime.fromisoformat(safeTraverse(microformat, ['publishDate'], default="1970-01-02T00:00:00Z")).timestamp() # ISO format to Unix timestamp
|
||||||
published_date = epochToDate(published)
|
published_date = epochToDate(published)
|
||||||
premiere_timestamp = safeTraverse(microformat, ['liveBroadcastDetails', 'startTimestamp'], default=0) # let's ignore the nitty gritty for the time being
|
premiere_timestamp = safeTraverse(microformat, ['liveBroadcastDetails', 'startTimestamp'], default=0) # let's ignore the nitty gritty for the time being
|
||||||
premiere_timestamp = premiere_timestamp if premiere_timestamp else safeTraverse(microformat, ['playabilityStatus', 'liveStreamability', 'liveStreamabilityRenderer', 'offlineSlate', 'liveStreamOfflineSlateRenderer', 'scheduledStartTime'], default=0)
|
premiere_timestamp = premiere_timestamp if premiere_timestamp else safeTraverse(microformat, ['playabilityStatus', 'liveStreamability', 'liveStreamabilityRenderer', 'offlineSlate', 'liveStreamOfflineSlateRenderer', 'scheduledStartTime'], default=0)
|
||||||
@@ -201,7 +201,6 @@ def videos(data):
|
|||||||
is_upcoming = safeTraverse(video_details, ['isUpcoming'], default=False)
|
is_upcoming = safeTraverse(video_details, ['isUpcoming'], default=False)
|
||||||
keywords = safeTraverse(video_details, ['keywords'], default=[])
|
keywords = safeTraverse(video_details, ['keywords'], default=[])
|
||||||
|
|
||||||
# TODO: https://github.com/iv-org/invidious/blob/master/src/invidious/videos/parser.cr#L258
|
|
||||||
related_raw = safeTraverse(wdata, ['ec2', 'contents', 'twoColumnWatchNextResults', 'secondaryResults', 'secondaryResults', 'results'], default=[]) # can possibly change in the future
|
related_raw = safeTraverse(wdata, ['ec2', 'contents', 'twoColumnWatchNextResults', 'secondaryResults', 'secondaryResults', 'results'], default=[]) # can possibly change in the future
|
||||||
related = []
|
related = []
|
||||||
for x in related_raw:
|
for x in related_raw:
|
||||||
@@ -216,6 +215,8 @@ def videos(data):
|
|||||||
related_video['authorId'] = safeTraverse(y, ['longBylineText', 'runs', 0, 'navigationEndpoint', 'browseEndpoint', 'browseId'], default="UNKNOWNCHANNELID")
|
related_video['authorId'] = safeTraverse(y, ['longBylineText', 'runs', 0, 'navigationEndpoint', 'browseEndpoint', 'browseId'], default="UNKNOWNCHANNELID")
|
||||||
related_video['authorUrl'] = '/channel/' + related_video['authorId']
|
related_video['authorUrl'] = '/channel/' + related_video['authorId']
|
||||||
related_video['authorVerified'] = False
|
related_video['authorVerified'] = False
|
||||||
|
if "ownerBadges" in y:
|
||||||
|
related_video['authorVerified'] = True # hopefully this won't break things, as invidious API doesn't distinguish music and normal verified badges
|
||||||
related_video['authorThumbnails'] = safeTraverse(y, ['channelThumbnail', 'thumbnails'], default=[])
|
related_video['authorThumbnails'] = safeTraverse(y, ['channelThumbnail', 'thumbnails'], default=[])
|
||||||
for z in related_video['authorThumbnails']:
|
for z in related_video['authorThumbnails']:
|
||||||
z['url'] = ythdd_globals.translateLinks(z['url'])
|
z['url'] = ythdd_globals.translateLinks(z['url'])
|
||||||
@@ -225,7 +226,7 @@ def videos(data):
|
|||||||
for z in range(len(time_list)):
|
for z in range(len(time_list)):
|
||||||
related_video['lengthSeconds'] += time_lookup_list[z] * int(time_list[len(time_list) - 1 - z])
|
related_video['lengthSeconds'] += time_lookup_list[z] * int(time_list[len(time_list) - 1 - z])
|
||||||
related_views_text = safeTraverse(y, ['viewCountText', 'simpleText'], default="0").split(" ")[0]
|
related_views_text = safeTraverse(y, ['viewCountText', 'simpleText'], default="0").split(" ")[0]
|
||||||
related_video['viewCountText'] = related_views_text
|
related_video['viewCountText'] = safeTraverse(y, ['shortViewCountText', 'simpleText'], default="0").split(" ")[0]
|
||||||
related_views = 0
|
related_views = 0
|
||||||
if related_views_text:
|
if related_views_text:
|
||||||
related_views = int("".join([z for z in related_views_text if 48 <= ord(z) and ord(z) <= 57]))
|
related_views = int("".join([z for z in related_views_text if 48 <= ord(z) and ord(z) <= 57]))
|
||||||
@@ -265,7 +266,11 @@ def videos(data):
|
|||||||
for x in author_thumbnail:
|
for x in author_thumbnail:
|
||||||
# rewrite to use views.py
|
# rewrite to use views.py
|
||||||
x['url'] = ythdd_globals.translateLinks(x['url'])
|
x['url'] = ythdd_globals.translateLinks(x['url'])
|
||||||
# TODO: author_verified = ...
|
|
||||||
|
# so far it seems to be impossible to tell if a channel is verified or not,
|
||||||
|
# that is - without making another request
|
||||||
|
author_verified = False
|
||||||
|
|
||||||
|
|
||||||
hls_url = safeTraverse(idata, ['stage1', 'streamingData', 'hlsManifestUrl'], default="")
|
hls_url = safeTraverse(idata, ['stage1', 'streamingData', 'hlsManifestUrl'], default="")
|
||||||
adaptive_formats = safeTraverse(idata, ['stage1', 'streamingData', 'adaptiveFormats'], default=[])
|
adaptive_formats = safeTraverse(idata, ['stage1', 'streamingData', 'adaptiveFormats'], default=[])
|
||||||
@@ -279,6 +284,11 @@ def videos(data):
|
|||||||
else:
|
else:
|
||||||
video_type = "video"
|
video_type = "video"
|
||||||
|
|
||||||
|
premium = False
|
||||||
|
if "YouTube Red" in keywords:
|
||||||
|
premium = True
|
||||||
|
# TODO: detect paywalled patron-only videos
|
||||||
|
|
||||||
if not format_streams:
|
if not format_streams:
|
||||||
format_streams = []
|
format_streams = []
|
||||||
# providing format streams breaks Clipious client
|
# providing format streams breaks Clipious client
|
||||||
@@ -305,7 +315,7 @@ def videos(data):
|
|||||||
"dislikeCount": 0,
|
"dislikeCount": 0,
|
||||||
|
|
||||||
"paid": False, # not implemented
|
"paid": False, # not implemented
|
||||||
"premium": False, # not implemented
|
"premium": premium,
|
||||||
"isFamilyFriendly": family_friendly,
|
"isFamilyFriendly": family_friendly,
|
||||||
"allowedRegions": allowed_regions,
|
"allowedRegions": allowed_regions,
|
||||||
"genre": genre,
|
"genre": genre,
|
||||||
@@ -314,7 +324,7 @@ def videos(data):
|
|||||||
"author": author,
|
"author": author,
|
||||||
"authorId": ucid,
|
"authorId": ucid,
|
||||||
"authorUrl": "/channel/" + ucid,
|
"authorUrl": "/channel/" + ucid,
|
||||||
"authorVerified": False, # not implemented
|
"authorVerified": author_verified,
|
||||||
"authorThumbnails": author_thumbnail,
|
"authorThumbnails": author_thumbnail,
|
||||||
|
|
||||||
"subCountText": subs_text,
|
"subCountText": subs_text,
|
||||||
|
|||||||
Reference in New Issue
Block a user