mirror of https://github.com/yt-dlp/yt-dlp
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.3 KiB
Python
97 lines
3.3 KiB
Python
11 years ago
|
from __future__ import unicode_literals
|
||
|
|
||
|
import re
|
||
|
|
||
|
from .common import InfoExtractor
|
||
|
from ..utils import (
|
||
9 years ago
|
determine_ext,
|
||
11 years ago
|
parse_duration,
|
||
|
unified_strdate,
|
||
|
)
|
||
|
|
||
|
|
||
|
class HuffPostIE(InfoExtractor):
|
||
|
IE_DESC = 'Huffington Post'
|
||
|
_VALID_URL = r'''(?x)
|
||
|
https?://(embed\.)?live\.huffingtonpost\.com/
|
||
|
(?:
|
||
|
r/segment/[^/]+/|
|
||
|
HPLEmbedPlayer/\?segmentId=
|
||
|
)
|
||
|
(?P<id>[0-9a-f]+)'''
|
||
|
|
||
|
_TEST = {
|
||
|
'url': 'http://live.huffingtonpost.com/r/segment/legalese-it/52dd3e4b02a7602131000677',
|
||
11 years ago
|
'md5': '55f5e8981c1c80a64706a44b74833de8',
|
||
11 years ago
|
'info_dict': {
|
||
11 years ago
|
'id': '52dd3e4b02a7602131000677',
|
||
|
'ext': 'mp4',
|
||
11 years ago
|
'title': 'Legalese It! with @MikeSacksHP',
|
||
|
'description': 'This week on Legalese It, Mike talks to David Bosco about his new book on the ICC, "Rough Justice," he also discusses the Virginia AG\'s historic stance on gay marriage, the execution of Edgar Tamayo, the ICC\'s delay of Kenya\'s President and more. ',
|
||
11 years ago
|
'duration': 1549,
|
||
11 years ago
|
'upload_date': '20140124',
|
||
9 years ago
|
},
|
||
|
'params': {
|
||
|
# m3u8 download
|
||
|
'skip_download': True,
|
||
|
},
|
||
|
'expected_warnings': ['HTTP Error 404: Not Found'],
|
||
11 years ago
|
}
|
||
|
|
||
|
def _real_extract(self, url):
|
||
10 years ago
|
video_id = self._match_id(url)
|
||
11 years ago
|
|
||
|
api_url = 'http://embed.live.huffingtonpost.com/api/segments/%s.json' % video_id
|
||
|
data = self._download_json(api_url, video_id)['data']
|
||
|
|
||
|
video_title = data['title']
|
||
10 years ago
|
duration = parse_duration(data.get('running_time'))
|
||
|
upload_date = unified_strdate(
|
||
|
data.get('schedule', {}).get('starts_at') or data.get('segment_start_date_time'))
|
||
11 years ago
|
description = data.get('description')
|
||
11 years ago
|
|
||
|
thumbnails = []
|
||
9 years ago
|
for url in filter(None, data['images'].values()):
|
||
8 years ago
|
m = re.match(r'.*-([0-9]+x[0-9]+)\.', url)
|
||
11 years ago
|
if not m:
|
||
|
continue
|
||
|
thumbnails.append({
|
||
|
'url': url,
|
||
|
'resolution': m.group(1),
|
||
|
})
|
||
|
|
||
9 years ago
|
formats = []
|
||
|
sources = data.get('sources', {})
|
||
|
live_sources = list(sources.get('live', {}).items()) + list(sources.get('live_again', {}).items())
|
||
|
for key, url in live_sources:
|
||
|
ext = determine_ext(url)
|
||
|
if ext == 'm3u8':
|
||
|
formats.extend(self._extract_m3u8_formats(
|
||
|
url, video_id, ext='mp4', m3u8_id='hls', fatal=False))
|
||
|
elif ext == 'f4m':
|
||
9 years ago
|
formats.extend(self._extract_f4m_formats(
|
||
9 years ago
|
url + '?hdcore=2.9.5', video_id, f4m_id='hds', fatal=False))
|
||
|
else:
|
||
|
formats.append({
|
||
|
'format': key,
|
||
|
'format_id': key.replace('/', '.'),
|
||
|
'ext': 'mp4',
|
||
|
'url': url,
|
||
|
'vcodec': 'none' if key.startswith('audio/') else None,
|
||
|
})
|
||
10 years ago
|
|
||
|
if not formats and data.get('fivemin_id'):
|
||
|
return self.url_result('5min:%s' % data['fivemin_id'])
|
||
|
|
||
11 years ago
|
self._sort_formats(formats)
|
||
|
|
||
|
return {
|
||
|
'id': video_id,
|
||
|
'title': video_title,
|
||
11 years ago
|
'description': description,
|
||
11 years ago
|
'formats': formats,
|
||
|
'duration': duration,
|
||
|
'upload_date': upload_date,
|
||
|
'thumbnails': thumbnails,
|
||
|
}
|