diff options
| author | Sergey M. <dstftw@gmail.com> | 2015-03-31 20:00:47 +0600 | 
|---|---|---|
| committer | Sergey M. <dstftw@gmail.com> | 2015-03-31 20:00:47 +0600 | 
| commit | ed06e9949bd121cdcd5d66e14b615abb2dbbd52e (patch) | |
| tree | d1a3f9356baa4f41dcd2a5f078b902c1d16ddaf8 | |
| parent | edd7344820303e550c9daae1ef591be8068ac47e (diff) | |
| parent | e15307a612ea588b504f1f03ba0201612df66b35 (diff) | |
Merge pull request #5328 from yan12125/fix_5226
[Yahoo/NBCSports] Fix 5226 and add support for NBC sports
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/generic.py | 15 | ||||
| -rw-r--r-- | youtube_dl/extractor/nbc.py | 52 | ||||
| -rw-r--r-- | youtube_dl/extractor/theplatform.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/yahoo.py | 15 | 
5 files changed, 85 insertions, 1 deletions
diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 43bac0252..9fddb8e32 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -311,6 +311,8 @@ from .nba import NBAIE  from .nbc import (      NBCIE,      NBCNewsIE, +    NBCSportsIE, +    NBCSportsVPlayerIE,  )  from .ndr import NDRIE  from .ndtv import NDTVIE diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 042d23a13..9ddf36f6b 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -29,6 +29,7 @@ from ..utils import (      xpath_text,  )  from .brightcove import BrightcoveIE +from .nbc import NBCSportsVPlayerIE  from .ooyala import OoyalaIE  from .rutv import RUTVIE  from .smotri import SmotriIE @@ -639,6 +640,15 @@ class GenericIE(InfoExtractor):                  'upload_date': '20150228',                  'title': 'pdv_maddow_netcast_m4v-02-27-2015-201624',              } +        }, +        # NBC Sports vplayer embeds +        { +            'url': 'http://bbs.clutchfans.net/showthread.php?t=244180', +            'info_dict': { +                'id': '_hqLjQ95yx8Z', +                'ext': 'flv' +            }, +            'skip': 'This content expired on 9/17/14 12:23 PM',          }      ] @@ -1252,6 +1262,11 @@ class GenericIE(InfoExtractor):          if mobj is not None:              return self.url_result('5min:%s' % mobj.group('id'), 'FiveMin') +        # Look for NBC Sports VPlayer embeds +        nbc_sports_url = NBCSportsVPlayerIE._extract_url(webpage) +        if nbc_sports_url: +            return self.url_result(nbc_sports_url, 'NBCSportsVPlayer') +          def check_video(vurl):              if YoutubeIE.suitable(vurl):                  return True diff --git a/youtube_dl/extractor/nbc.py b/youtube_dl/extractor/nbc.py index 80a01c778..b7f6a5366 100644 --- a/youtube_dl/extractor/nbc.py +++ b/youtube_dl/extractor/nbc.py @@ -50,6 +50,58 @@ class NBCIE(InfoExtractor):          return self.url_result(theplatform_url) +class NBCSportsVPlayerIE(InfoExtractor): +    _VALID_URL = r'https?://vplayer\.nbcsports\.com/(?:[^/]+/)+(?P<id>[0-9a-zA-Z_]+)' + +    _TESTS = [{ +        'url': 'https://vplayer.nbcsports.com/p/BxmELC/nbcsports_share/select/9CsDKds0kvHI', +        'info_dict': { +            'id': '9CsDKds0kvHI', +            'ext': 'flv', +            'description': 'md5:df390f70a9ba7c95ff1daace988f0d8d', +            'title': 'Tyler Kalinoski hits buzzer-beater to lift Davidson', +        } +    }, { +        'note': 'This video is already expired. It\'s for testing _VALID_URL', +        'url': 'http://vplayer.nbcsports.com/p/BxmELC/nbc_embedshare/select/_hqLjQ95yx8Z', +        'only_matching': True, +    }] + +    @staticmethod +    def _extract_url(webpage): +        iframe_m = re.search( +            r'<iframe[^>]+src="(?P<url>https?://vplayer\.nbcsports\.com/[^"]+)"', webpage) +        if iframe_m: +            return iframe_m.group('url') + +    def _real_extract(self, url): +        video_id = self._match_id(url) +        webpage = self._download_webpage(url, video_id) +        theplatform_url = self._og_search_video_url(webpage) +        return self.url_result(theplatform_url, 'ThePlatform') + + +class NBCSportsIE(InfoExtractor): +    # Does not include https becuase its certificate is invalid +    _VALID_URL = r'http://www\.nbcsports\.com//?(?:[^/]+/)+(?P<id>[0-9a-z-]+)' + +    _TEST = { +        'url': 'http://www.nbcsports.com//college-basketball/ncaab/tom-izzo-michigan-st-has-so-much-respect-duke', +        'info_dict': { +            'id': 'PHJSaFWbrTY9', +            'ext': 'flv', +            'title': 'Tom Izzo, Michigan St. has \'so much respect\' for Duke', +            'description': 'md5:ecb459c9d59e0766ac9c7d5d0eda8113', +        } +    } + +    def _real_extract(self, url): +        video_id = self._match_id(url) +        webpage = self._download_webpage(url, video_id) +        return self.url_result( +            NBCSportsVPlayerIE._extract_url(webpage), 'NBCSportsVPlayer') + +  class NBCNewsIE(InfoExtractor):      _VALID_URL = r'''(?x)https?://(?:www\.)?nbcnews\.com/          (?:video/.+?/(?P<id>\d+)| diff --git a/youtube_dl/extractor/theplatform.py b/youtube_dl/extractor/theplatform.py index feac666f7..0e3e627f4 100644 --- a/youtube_dl/extractor/theplatform.py +++ b/youtube_dl/extractor/theplatform.py @@ -92,7 +92,7 @@ class ThePlatformIE(InfoExtractor):              error_msg = next(                  n.attrib['abstract']                  for n in meta.findall(_x('.//smil:ref')) -                if n.attrib.get('title') == 'Geographic Restriction') +                if n.attrib.get('title') == 'Geographic Restriction' or n.attrib.get('title') == 'Expired')          except StopIteration:              pass          else: diff --git a/youtube_dl/extractor/yahoo.py b/youtube_dl/extractor/yahoo.py index 97dbac4cc..b777159c5 100644 --- a/youtube_dl/extractor/yahoo.py +++ b/youtube_dl/extractor/yahoo.py @@ -17,6 +17,8 @@ from ..utils import (      int_or_none,  ) +from .nbc import NBCSportsVPlayerIE +  class YahooIE(InfoExtractor):      IE_DESC = 'Yahoo screen and movies' @@ -129,6 +131,15 @@ class YahooIE(InfoExtractor):          }, {              'url': 'https://gma.yahoo.com/pizza-delivery-man-surprised-huge-tip-college-kids-195200785.html',              'only_matching': True, +        }, { +            'note': 'NBC Sports embeds', +            'url': 'http://sports.yahoo.com/blogs/ncaab-the-dagger/tyler-kalinoski-s-buzzer-beater-caps-davidson-s-comeback-win-185609842.html?guid=nbc_cbk_davidsonbuzzerbeater_150313', +            'info_dict': { +                'id': '9CsDKds0kvHI', +                'ext': 'flv', +                'description': 'md5:df390f70a9ba7c95ff1daace988f0d8d', +                'title': 'Tyler Kalinoski hits buzzer-beater to lift Davidson', +            }          }      ] @@ -151,6 +162,10 @@ class YahooIE(InfoExtractor):                  items = json.loads(items_json)                  video_id = items[0]['id']                  return self._get_info(video_id, display_id, webpage) +        # Look for NBCSports iframes +        nbc_sports_url = NBCSportsVPlayerIE._extract_url(webpage) +        if nbc_sports_url: +            return self.url_result(nbc_sports_url, 'NBCSportsVPlayer')          items_json = self._search_regex(              r'mediaItems: ({.*?})$', webpage, 'items', flags=re.MULTILINE,  | 
