diff options
author | Yen Chi Hsuan <yan12125@gmail.com> | 2015-10-31 22:06:05 +0800 |
---|---|---|
committer | Yen Chi Hsuan <yan12125@gmail.com> | 2015-10-31 22:06:05 +0800 |
commit | 33a513faf716e5d4a170da50d6fde541817dca09 (patch) | |
tree | 9ffa9ae0e11c727fc0dafc2acb99f99855c48b91 | |
parent | 6722ebd43720e836af8217fa078fa1a604b98229 (diff) | |
parent | eb08081330f5ef52d66140589137ae1bb05eee5f (diff) |
Merge branch 'pr-democracynow' of https://github.com/atomicdryad/youtube-dl into atomicdryad-pr-democracynow
-rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
-rw-r--r-- | youtube_dl/extractor/democracynow.py | 85 |
2 files changed, 86 insertions, 0 deletions
diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index f98e6487e..10286aa88 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -124,6 +124,7 @@ from .dbtv import DBTVIE from .dcn import DCNIE from .dctp import DctpTvIE from .deezer import DeezerPlaylistIE +from .democracynow import DemocracynowIE from .dfb import DFBIE from .dhm import DHMIE from .dotsub import DotsubIE diff --git a/youtube_dl/extractor/democracynow.py b/youtube_dl/extractor/democracynow.py new file mode 100644 index 000000000..973bb437b --- /dev/null +++ b/youtube_dl/extractor/democracynow.py @@ -0,0 +1,85 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re +from .common import InfoExtractor + + +class DemocracynowIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?democracynow.org/?(?P<id>[^\?]*)' + IE_NAME = 'democracynow' + _TESTS = [{ + 'url': 'http://www.democracynow.org/shows/2015/7/3', + 'info_dict': { + 'id': '2015-0703-001', + 'ext': 'mp4', + 'title': 'July 03, 2015 - Democracy Now!', + 'description': 'A daily independent global news hour with Amy Goodman & Juan Gonz\xe1lez "What to the Slave is 4th of July?": James Earl Jones Reads Frederick Douglass\u2019 Historic Speech : "This Flag Comes Down Today": Bree Newsome Scales SC Capitol Flagpole, Takes Down Confederate Flag : "We Shall Overcome": Remembering Folk Icon, Activist Pete Seeger in His Own Words & Songs', + 'uploader': 'Democracy Now', + 'upload_date': None, + }, + }, { + 'url': 'http://www.democracynow.org/2015/7/3/this_flag_comes_down_today_bree', + 'info_dict': { + 'id': '2015-0703-001', + 'ext': 'mp4', + 'title': '"This Flag Comes Down Today": Bree Newsome Scales SC Capitol Flagpole, Takes Down Confederate Flag', + 'description': 'md5:4d2bc4f0d29f5553c2210a4bc7761a21', + 'uploader': 'Democracy Now', + 'upload_date': None, + }, + }] + + def _real_extract(self, url): + display_id = self._match_id(url) + base_host = re.search(r'^(.+?://[^/]+)', url).group(1) + if display_id == '': + display_id = 'home' + webpage = self._download_webpage(url, display_id) + re_desc = re.search(r'<meta property=.og:description. content=(["\'])(.+?)\1', webpage, re.DOTALL) + description = re_desc.group(2) if re_desc else '' + + jstr = self._search_regex(r'({.+?"related_video_xml".+?})', webpage, 'json', default=None) + js = self._parse_json(jstr, display_id) + video_id = None + formats = [] + subtitles = {} + for key in ('caption_file', '.......'): + # ....... = pending vtt support that doesn't clobber srt 'chapter_file': + url = js.get(key, '') + if url == '' or url is None: + continue + if not re.match(r'^https?://', url): + url = base_host + url + ext = re.search(r'\.([^\.]+)$', url).group(1) + subtitles['eng'] = [{ + 'ext': ext, + 'url': url, + }] + for key in ('file', 'audio'): + url = js.get(key, '') + if url == '' or url is None: + continue + if not re.match(r'^https?://', url): + url = base_host + url + purl = re.search(r'/(?P<dir>[^/]+)/(?:dn)?(?P<fn>[^/]+?)\.(?P<ext>[^\.\?]+)(?P<hasparams>\?|$)', url) + if video_id is None: + video_id = purl.group('fn') + if js.get('start') is not None: + url += '&' if purl.group('hasparams') == '?' else '?' + url = url + 'start=' + str(js.get('start')) + formats.append({ + 'format_id': purl.group('dir'), + 'ext': purl.group('ext'), + 'url': url, + }) + self._sort_formats(formats) + ret = { + 'id': video_id, + 'title': js.get('title'), + 'description': description, + 'uploader': 'Democracy Now', + 'subtitles': subtitles, + 'formats': formats, + } + return ret |