diff options
Diffstat (limited to 'youtube_dl/InfoExtractors.py')
| -rw-r--r-- | youtube_dl/InfoExtractors.py | 43 | 
1 files changed, 33 insertions, 10 deletions
| diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index ae17acd5d..1b37eb648 100644 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -2397,7 +2397,19 @@ class MyVideoIE(InfoExtractor):  class ComedyCentralIE(InfoExtractor):      """Information extractor for The Daily Show and Colbert Report """ -    _VALID_URL = r'^(:(?P<shortname>tds|thedailyshow|cr|colbert|colbertnation|colbertreport))|(https?://)?(www\.)?(?P<showname>thedailyshow|colbertnation)\.com/full-episodes/(?P<episode>.*)$' +    # urls can be abbreviations like :thedailyshow or :colbert +    # urls for episodes like:  +    # or urls for clips like: http://www.thedailyshow.com/watch/mon-december-10-2012/any-given-gun-day +    #                     or: http://www.colbertnation.com/the-colbert-report-videos/421667/november-29-2012/moon-shattering-news +    #                     or: http://www.colbertnation.com/the-colbert-report-collections/422008/festival-of-lights/79524     +    _VALID_URL = r"""^(:(?P<shortname>tds|thedailyshow|cr|colbert|colbertnation|colbertreport) +                      |(https?://)?(www\.)? +                          (?P<showname>thedailyshow|colbertnation)\.com/ +                         (full-episodes/(?P<episode>.*)| +                          (?P<clip> +                              (the-colbert-report-(videos|collections)/(?P<clipID>[0-9]+)/[^/]*/(?P<cntitle>.*?)) +                              |(watch/(?P<date>[^/]*)/(?P<tdstitle>.*))))) +                     $"""                              IE_NAME = u'comedycentral'      _available_formats = ['3500', '2200', '1700', '1200', '750', '400'] @@ -2419,6 +2431,10 @@ class ComedyCentralIE(InfoExtractor):          '400': '384x216',      } +    def suitable(self, url): +        """Receives a URL and returns True if suitable for this IE.""" +        return re.match(self._VALID_URL, url, re.VERBOSE) is not None +      def report_extraction(self, episode_id):          self._downloader.to_screen(u'[comedycentral] %s: Extracting information' % episode_id) @@ -2439,7 +2455,7 @@ class ComedyCentralIE(InfoExtractor):      def _real_extract(self, url): -        mobj = re.match(self._VALID_URL, url) +        mobj = re.match(self._VALID_URL, url, re.VERBOSE)          if mobj is None:              self._downloader.trouble(u'ERROR: invalid URL: %s' % url)              return @@ -2449,14 +2465,21 @@ class ComedyCentralIE(InfoExtractor):                  url = u'http://www.thedailyshow.com/full-episodes/'              else:                  url = u'http://www.colbertnation.com/full-episodes/' -            mobj = re.match(self._VALID_URL, url) +            mobj = re.match(self._VALID_URL, url, re.VERBOSE)              assert mobj is not None -        dlNewest = not mobj.group('episode') -        if dlNewest: -            epTitle = mobj.group('showname') +        if mobj.group('clip'): +            if mobj.group('showname') == 'thedailyshow': +                epTitle = mobj.group('tdstitle') +            else: +                epTitle = mobj.group('cntitle') +            dlNewest = False          else: -            epTitle = mobj.group('episode') +            dlNewest = not mobj.group('episode') +            if dlNewest: +                epTitle = mobj.group('showname') +            else: +                epTitle = mobj.group('episode')          req = compat_urllib_request.Request(url)          self.report_extraction(epTitle) @@ -2468,7 +2491,7 @@ class ComedyCentralIE(InfoExtractor):              return          if dlNewest:              url = htmlHandle.geturl() -            mobj = re.match(self._VALID_URL, url) +            mobj = re.match(self._VALID_URL, url, re.VERBOSE)              if mobj is None:                  self._downloader.trouble(u'ERROR: Invalid redirected URL: ' + url)                  return @@ -2477,14 +2500,14 @@ class ComedyCentralIE(InfoExtractor):                  return              epTitle = mobj.group('episode') -        mMovieParams = re.findall('(?:<param name="movie" value="|var url = ")(http://media.mtvnservices.com/([^"]*episode.*?:.*?))"', html) +        mMovieParams = re.findall('(?:<param name="movie" value="|var url = ")(http://media.mtvnservices.com/([^"]*(?:episode|video).*?:.*?))"', html)          if len(mMovieParams) == 0:              # The Colbert Report embeds the information in a without              # a URL prefix; so extract the alternate reference              # and then add the URL prefix manually. -            altMovieParams = re.findall('data-mgid="([^"]*episode.*?:.*?)"', html) +            altMovieParams = re.findall('data-mgid="([^"]*(?:episode|video).*?:.*?)"', html)              if len(altMovieParams) == 0:                  self._downloader.trouble(u'ERROR: unable to find Flash URL in webpage ' + url)                  return | 
