[vimeo:likes] Add new extractor (Fixes #3835)
authorPhilipp Hagemeister <phihag@phihag.de>
Sun, 28 Sep 2014 10:14:16 +0000 (12:14 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Sun, 28 Sep 2014 10:14:16 +0000 (12:14 +0200)
test/test_download.py
youtube_dl/extractor/__init__.py
youtube_dl/extractor/generic.py
youtube_dl/extractor/vimeo.py

index 2b8ac69754502457ea2e09aa026f3eceaee732f4..8178015eacb5600f99c983a77bfa43abd9d37b6a 100644 (file)
@@ -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']]
index 6ab3eeaf5e0f95a4c2607eb50cf7860cfc7d7feb..86bff185b40db1680593e0c6a96b0a7dcd5dd928 100644 (file)
@@ -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
index 367f930dd093567b1c033961fdf0326ded47dbba..0dfa4853dbd3b1cbacaf2b9532dcdeffc8a9300c 100644 (file)
@@ -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:
index bc01d7fbf583eb44ccc708c7fb00b4b113f82bc0..4be1b878585525f70bec0be87c122bf3b10eee9b 100644 (file)
@@ -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,
+        }