|
|
|
@ -70,7 +70,6 @@ from ..utils import (
|
|
|
|
|
str_or_none,
|
|
|
|
|
str_to_int,
|
|
|
|
|
strip_or_none,
|
|
|
|
|
try_get,
|
|
|
|
|
unescapeHTML,
|
|
|
|
|
unified_strdate,
|
|
|
|
|
unified_timestamp,
|
|
|
|
@ -1276,6 +1275,7 @@ class InfoExtractor(object):
|
|
|
|
|
|
|
|
|
|
def extract_video_object(e):
|
|
|
|
|
assert e['@type'] == 'VideoObject'
|
|
|
|
|
author = e.get('author')
|
|
|
|
|
info.update({
|
|
|
|
|
'url': url_or_none(e.get('contentUrl')),
|
|
|
|
|
'title': unescapeHTML(e.get('name')),
|
|
|
|
@ -1283,7 +1283,11 @@ class InfoExtractor(object):
|
|
|
|
|
'thumbnail': url_or_none(e.get('thumbnailUrl') or e.get('thumbnailURL')),
|
|
|
|
|
'duration': parse_duration(e.get('duration')),
|
|
|
|
|
'timestamp': unified_timestamp(e.get('uploadDate')),
|
|
|
|
|
'uploader': try_get(e, lambda x: x['author']['name'], compat_str),
|
|
|
|
|
# author can be an instance of 'Organization' or 'Person' types.
|
|
|
|
|
# both types can have 'name' property(inherited from 'Thing' type). [1]
|
|
|
|
|
# however some websites are using 'Text' type instead.
|
|
|
|
|
# 1. https://schema.org/VideoObject
|
|
|
|
|
'uploader': author.get('name') if isinstance(author, dict) else author if isinstance(author, compat_str) else None,
|
|
|
|
|
'filesize': float_or_none(e.get('contentSize')),
|
|
|
|
|
'tbr': int_or_none(e.get('bitrate')),
|
|
|
|
|
'width': int_or_none(e.get('width')),
|
|
|
|
|