|
|
@ -5,10 +5,11 @@ import re
|
|
|
|
|
|
|
|
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from ..utils import (
|
|
|
|
from ..utils import (
|
|
|
|
parse_iso8601,
|
|
|
|
|
|
|
|
float_or_none,
|
|
|
|
|
|
|
|
ExtractorError,
|
|
|
|
ExtractorError,
|
|
|
|
|
|
|
|
float_or_none,
|
|
|
|
int_or_none,
|
|
|
|
int_or_none,
|
|
|
|
|
|
|
|
parse_iso8601,
|
|
|
|
|
|
|
|
try_get,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -35,7 +36,7 @@ class NineCNineMediaIE(InfoExtractor):
|
|
|
|
'$include': '[HasClosedCaptions]',
|
|
|
|
'$include': '[HasClosedCaptions]',
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
if content_package.get('Constraints', {}).get('Security', {}).get('Type'):
|
|
|
|
if try_get(content_package, lambda x: x['Constraints']['Security']['Type']):
|
|
|
|
raise ExtractorError('This video is DRM protected.', expected=True)
|
|
|
|
raise ExtractorError('This video is DRM protected.', expected=True)
|
|
|
|
|
|
|
|
|
|
|
|
manifest_base_url = content_package_url + 'manifest.'
|
|
|
|
manifest_base_url = content_package_url + 'manifest.'
|
|
|
@ -52,7 +53,7 @@ class NineCNineMediaIE(InfoExtractor):
|
|
|
|
self._sort_formats(formats)
|
|
|
|
self._sort_formats(formats)
|
|
|
|
|
|
|
|
|
|
|
|
thumbnails = []
|
|
|
|
thumbnails = []
|
|
|
|
for image in content.get('Images', []):
|
|
|
|
for image in (content.get('Images') or []):
|
|
|
|
image_url = image.get('Url')
|
|
|
|
image_url = image.get('Url')
|
|
|
|
if not image_url:
|
|
|
|
if not image_url:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
@ -70,7 +71,7 @@ class NineCNineMediaIE(InfoExtractor):
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
container.append(e_name)
|
|
|
|
container.append(e_name)
|
|
|
|
|
|
|
|
|
|
|
|
season = content.get('Season', {})
|
|
|
|
season = content.get('Season') or {}
|
|
|
|
|
|
|
|
|
|
|
|
info = {
|
|
|
|
info = {
|
|
|
|
'id': content_id,
|
|
|
|
'id': content_id,
|
|
|
@ -79,13 +80,14 @@ class NineCNineMediaIE(InfoExtractor):
|
|
|
|
'timestamp': parse_iso8601(content.get('BroadcastDateTime')),
|
|
|
|
'timestamp': parse_iso8601(content.get('BroadcastDateTime')),
|
|
|
|
'episode_number': int_or_none(content.get('Episode')),
|
|
|
|
'episode_number': int_or_none(content.get('Episode')),
|
|
|
|
'season': season.get('Name'),
|
|
|
|
'season': season.get('Name'),
|
|
|
|
'season_number': season.get('Number'),
|
|
|
|
'season_number': int_or_none(season.get('Number')),
|
|
|
|
'season_id': season.get('Id'),
|
|
|
|
'season_id': season.get('Id'),
|
|
|
|
'series': content.get('Media', {}).get('Name'),
|
|
|
|
'series': try_get(content, lambda x: x['Media']['Name']),
|
|
|
|
'tags': tags,
|
|
|
|
'tags': tags,
|
|
|
|
'categories': categories,
|
|
|
|
'categories': categories,
|
|
|
|
'duration': float_or_none(content_package.get('Duration')),
|
|
|
|
'duration': float_or_none(content_package.get('Duration')),
|
|
|
|
'formats': formats,
|
|
|
|
'formats': formats,
|
|
|
|
|
|
|
|
'thumbnails': thumbnails,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if content_package.get('HasClosedCaptions'):
|
|
|
|
if content_package.get('HasClosedCaptions'):
|
|
|
|