diff options
Diffstat (limited to 'youtube_dl/extractor/nbc.py')
| -rw-r--r-- | youtube_dl/extractor/nbc.py | 42 | 
1 files changed, 35 insertions, 7 deletions
| diff --git a/youtube_dl/extractor/nbc.py b/youtube_dl/extractor/nbc.py index dc2091be0..340c922bd 100644 --- a/youtube_dl/extractor/nbc.py +++ b/youtube_dl/extractor/nbc.py @@ -3,14 +3,12 @@ from __future__ import unicode_literals  import re  from .common import InfoExtractor -from ..compat import ( -    compat_str, -    compat_HTTPError, -) +from ..compat import compat_HTTPError  from ..utils import (      ExtractorError,      find_xpath_attr,      lowercase_escape, +    smuggle_url,      unescapeHTML,  ) @@ -62,12 +60,13 @@ class NBCIE(InfoExtractor):          theplatform_url = unescapeHTML(lowercase_escape(self._html_search_regex(              [                  r'(?:class="video-player video-player-full" data-mpx-url|class="player" src)="(.*?)"', +                r'<iframe[^>]+src="((?:https?:)?//player\.theplatform\.com/[^"]+)"',                  r'"embedURL"\s*:\s*"([^"]+)"'              ],              webpage, 'theplatform url').replace('_no_endcard', '').replace('\\/', '/')))          if theplatform_url.startswith('//'):              theplatform_url = 'http:' + theplatform_url -        return self.url_result(theplatform_url) +        return self.url_result(smuggle_url(theplatform_url, {'source_url': url}))  class NBCSportsVPlayerIE(InfoExtractor): @@ -124,7 +123,7 @@ class NBCSportsIE(InfoExtractor):  class NBCNewsIE(InfoExtractor):      _VALID_URL = r'''(?x)https?://(?:www\.)?nbcnews\.com/          (?:video/.+?/(?P<id>\d+)| -        (?:feature|nightly-news)/[^/]+/(?P<title>.+)) +        (?:watch|feature|nightly-news)/[^/]+/(?P<title>.+))          '''      _TESTS = [ @@ -169,6 +168,10 @@ class NBCNewsIE(InfoExtractor):                  'description': 'md5:1c10c1eccbe84a26e5debb4381e2d3c5',              },          }, +        { +            'url': 'http://www.nbcnews.com/watch/dateline/full-episode--deadly-betrayal-386250819952', +            'only_matching': True, +        },      ]      def _real_extract(self, url): @@ -183,7 +186,7 @@ class NBCNewsIE(InfoExtractor):                  'title': info.find('headline').text,                  'ext': 'flv',                  'url': find_xpath_attr(info, 'media', 'type', 'flashVideo').text, -                'description': compat_str(info.find('caption').text), +                'description': info.find('caption').text,                  'thumbnail': find_xpath_attr(info, 'media', 'type', 'thumbnail').text,              }          else: @@ -232,3 +235,28 @@ class NBCNewsIE(InfoExtractor):                  'url': info['videoAssets'][-1]['publicUrl'],                  'ie_key': 'ThePlatform',              } + + +class MSNBCIE(InfoExtractor): +    # https URLs redirect to corresponding http ones +    _VALID_URL = r'http://www\.msnbc\.com/[^/]+/watch/(?P<id>[^/]+)' +    _TEST = { +        'url': 'http://www.msnbc.com/all-in-with-chris-hayes/watch/the-chaotic-gop-immigration-vote-314487875924', +        'md5': '6d236bf4f3dddc226633ce6e2c3f814d', +        'info_dict': { +            'id': 'n_hayes_Aimm_140801_272214', +            'ext': 'mp4', +            'title': 'The chaotic GOP immigration vote', +            'description': 'The Republican House votes on a border bill that has no chance of getting through the Senate or signed by the President and is drawing criticism from all sides.', +            'thumbnail': 're:^https?://.*\.jpg$', +            'timestamp': 1406937606, +            'upload_date': '20140802', +            'categories': ['MSNBC/Topics/Franchise/Best of last night', 'MSNBC/Topics/General/Congress'], +        }, +    } + +    def _real_extract(self, url): +        video_id = self._match_id(url) +        webpage = self._download_webpage(url, video_id) +        embed_url = self._html_search_meta('embedURL', webpage) +        return self.url_result(embed_url) | 
