[vimeo:likes] Add new extractor (Fixes #3835)
[youtube-dl] / youtube_dl / extractor / vimeo.py
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,
+        }