aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2014-09-28 12:14:16 +0200
committerPhilipp Hagemeister <phihag@phihag.de>2014-09-28 12:14:16 +0200
commitd6e6a4225650ff220c7fe0687d883552e4b45bde (patch)
treee5692e65674c2d424f48d1086c6fdab6704d5258
parent76e7d1e74b10b99ed9289b0c30c5f4933f9d841e (diff)
[vimeo:likes] Add new extractor (Fixes #3835)
-rw-r--r--test/test_download.py4
-rw-r--r--youtube_dl/extractor/__init__.py5
-rw-r--r--youtube_dl/extractor/generic.py10
-rw-r--r--youtube_dl/extractor/vimeo.py33
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,
+ }