diff options
| author | Philipp Hagemeister <phihag@phihag.de> | 2014-09-28 12:14:16 +0200 | 
|---|---|---|
| committer | Philipp Hagemeister <phihag@phihag.de> | 2014-09-28 12:14:16 +0200 | 
| commit | d6e6a4225650ff220c7fe0687d883552e4b45bde (patch) | |
| tree | e5692e65674c2d424f48d1086c6fdab6704d5258 | |
| parent | 76e7d1e74b10b99ed9289b0c30c5f4933f9d841e (diff) | |
[vimeo:likes] Add new extractor (Fixes #3835)
| -rw-r--r-- | test/test_download.py | 4 | ||||
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 5 | ||||
| -rw-r--r-- | youtube_dl/extractor/generic.py | 10 | ||||
| -rw-r--r-- | youtube_dl/extractor/vimeo.py | 33 | 
4 files changed, 43 insertions, 9 deletions
| diff --git a/test/test_download.py b/test/test_download.py index 2b8ac6975..8178015ea 100644 --- a/test/test_download.py +++ b/test/test_download.py @@ -139,7 +139,9 @@ def generator(test_case):              if is_playlist:                  self.assertEqual(res_dict['_type'], 'playlist') +                self.assertTrue('entries' in res_dict)                  expect_info_dict(self, test_case.get('info_dict', {}), res_dict) +              if 'playlist_mincount' in test_case:                  assertGreaterEqual(                      self, @@ -188,7 +190,7 @@ def generator(test_case):                  expect_info_dict(self, tc.get('info_dict', {}), info_dict)          finally:              try_rm_tcs_files() -            if is_playlist and res_dict is not None: +            if is_playlist and res_dict is not None and res_dict.get('entries'):                  # Remove all other files that may have been extracted if the                  # extractor returns full results even with extract_flat                  res_tcs = [{'info_dict': e} for e in res_dict['entries']] diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 6ab3eeaf5..86bff185b 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -412,11 +412,12 @@ from .videoweed import VideoWeedIE  from .vidme import VidmeIE  from .vimeo import (      VimeoIE, -    VimeoChannelIE, -    VimeoUserIE,      VimeoAlbumIE, +    VimeoChannelIE,      VimeoGroupsIE, +    VimeoLikesIE,      VimeoReviewIE, +    VimeoUserIE,      VimeoWatchLaterIE,  )  from .vimple import VimpleIE diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 367f930dd..0dfa4853d 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -397,12 +397,6 @@ class GenericIE(InfoExtractor):          },      ] -    def report_download_webpage(self, video_id): -        """Report webpage download.""" -        if not self._downloader.params.get('test', False): -            self._downloader.report_warning('Falling back on generic information extractor.') -        super(GenericIE, self).report_download_webpage(video_id) -      def report_following_redirect(self, new_url):          """Report information extraction."""          self._downloader.to_screen('[redirect] Following redirect to %s' % new_url) @@ -502,6 +496,7 @@ class GenericIE(InfoExtractor):          url, smuggled_data = unsmuggle_url(url)          force_videoid = None +        is_intentional = smuggled_data and smuggled_data.get('to_generic')          if smuggled_data and 'force_videoid' in smuggled_data:              force_videoid = smuggled_data['force_videoid']              video_id = force_videoid @@ -544,6 +539,9 @@ class GenericIE(InfoExtractor):                      'upload_date': upload_date,                  } +        if not self._downloader.params.get('test', False) and not is_intentional: +            self._downloader.report_warning('Falling back on generic information extractor.') +          try:              webpage = self._download_webpage(url, video_id)          except ValueError: diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index bc01d7fbf..4be1b8785 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -15,6 +15,7 @@ from ..utils import (      get_element_by_attribute,      ExtractorError,      RegexNotFoundError, +    smuggle_url,      std_headers,      unsmuggle_url,      urlencode_postdata, @@ -529,3 +530,35 @@ class VimeoWatchLaterIE(VimeoBaseInfoExtractor, VimeoChannelIE):      def _real_extract(self, url):          return self._extract_videos('watchlater', 'https://vimeo.com/home/watchlater') + + +class VimeoLikesIE(InfoExtractor): +    _VALID_URL = r'https?://(?:www\.)?vimeo\.com/user(?P<id>[0-9]+)/likes(?:$|[?#])' +    IE_NAME = 'vimeo:likes' +    IE_DESC = 'Vimeo user likes' +    _TEST = { +        'url': 'https://vimeo.com/user20132939/likes', +        'playlist_mincount': 4, +        'add_ies': ['Generic'], +        "info_dict": { +            "description": "Videos Philipp Hagemeister likes on Vimeo.", +            "title": "Vimeo / Philipp Hagemeister's likes", +        }, +        'params': { +            'extract_flat': False, +        }, +    } + +    def _real_extract(self, url): +        user_id = self._match_id(url) +        rss_url = '%s//vimeo.com/user%s/likes/rss' % ( +            self.http_scheme(), user_id) +        surl = smuggle_url(rss_url, { +            'force_videoid': '%s_likes' % user_id, +            'to_generic': True, +        }) + +        return { +            '_type': 'url', +            'url': surl, +        } | 
