|
|
|
@ -4,6 +4,7 @@ from .common import InfoExtractor
|
|
|
|
|
from ..utils import (
|
|
|
|
|
int_or_none,
|
|
|
|
|
qualities,
|
|
|
|
|
url_or_none,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -48,6 +49,10 @@ class NprIE(InfoExtractor):
|
|
|
|
|
},
|
|
|
|
|
}],
|
|
|
|
|
'expected_warnings': ['Failed to download m3u8 information'],
|
|
|
|
|
}, {
|
|
|
|
|
# multimedia, no formats, stream
|
|
|
|
|
'url': 'https://www.npr.org/2020/02/14/805476846/laura-stevenson-tiny-desk-concert',
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
@ -95,6 +100,17 @@ class NprIE(InfoExtractor):
|
|
|
|
|
'format_id': format_id,
|
|
|
|
|
'quality': quality(format_id),
|
|
|
|
|
})
|
|
|
|
|
for stream_id, stream_entry in media.get('stream', {}).items():
|
|
|
|
|
if not isinstance(stream_entry, dict):
|
|
|
|
|
continue
|
|
|
|
|
if stream_id != 'hlsUrl':
|
|
|
|
|
continue
|
|
|
|
|
stream_url = url_or_none(stream_entry.get('$text'))
|
|
|
|
|
if not stream_url:
|
|
|
|
|
continue
|
|
|
|
|
formats.extend(self._extract_m3u8_formats(
|
|
|
|
|
stream_url, stream_id, 'mp4', 'm3u8_native',
|
|
|
|
|
m3u8_id='hls', fatal=False))
|
|
|
|
|
self._sort_formats(formats)
|
|
|
|
|
|
|
|
|
|
entries.append({
|
|
|
|
|