mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-27 02:42:30 +00:00
[vimeo] Move all testcases to extractors and clean up
Previously, these extractors all defined their own suitable methods. No test_all_urls tests that everything is in order, automatically :)
This commit is contained in:
parent
22449fa624
commit
2929b3e71d
@ -87,38 +87,6 @@ def test_dailymotion_user(self):
|
|||||||
assertGreaterEqual(self, len(result['entries']), 100)
|
assertGreaterEqual(self, len(result['entries']), 100)
|
||||||
self.assertEqual(result['title'], 'Rémi Gaillard')
|
self.assertEqual(result['title'], 'Rémi Gaillard')
|
||||||
|
|
||||||
def test_vimeo_channel(self):
|
|
||||||
dl = FakeYDL()
|
|
||||||
ie = VimeoChannelIE(dl)
|
|
||||||
result = ie.extract('http://vimeo.com/channels/tributes')
|
|
||||||
self.assertIsPlaylist(result)
|
|
||||||
self.assertEqual(result['title'], 'Vimeo Tributes')
|
|
||||||
self.assertTrue(len(result['entries']) > 24)
|
|
||||||
|
|
||||||
def test_vimeo_user(self):
|
|
||||||
dl = FakeYDL()
|
|
||||||
ie = VimeoUserIE(dl)
|
|
||||||
result = ie.extract('http://vimeo.com/nkistudio/videos')
|
|
||||||
self.assertIsPlaylist(result)
|
|
||||||
self.assertEqual(result['title'], 'Nki')
|
|
||||||
self.assertTrue(len(result['entries']) > 65)
|
|
||||||
|
|
||||||
def test_vimeo_album(self):
|
|
||||||
dl = FakeYDL()
|
|
||||||
ie = VimeoAlbumIE(dl)
|
|
||||||
result = ie.extract('http://vimeo.com/album/2632481')
|
|
||||||
self.assertIsPlaylist(result)
|
|
||||||
self.assertEqual(result['title'], 'Staff Favorites: November 2013')
|
|
||||||
self.assertTrue(len(result['entries']) > 12)
|
|
||||||
|
|
||||||
def test_vimeo_groups(self):
|
|
||||||
dl = FakeYDL()
|
|
||||||
ie = VimeoGroupsIE(dl)
|
|
||||||
result = ie.extract('http://vimeo.com/groups/rolexawards')
|
|
||||||
self.assertIsPlaylist(result)
|
|
||||||
self.assertEqual(result['title'], 'Rolex Awards for Enterprise')
|
|
||||||
self.assertTrue(len(result['entries']) > 72)
|
|
||||||
|
|
||||||
def test_vine_user(self):
|
def test_vine_user(self):
|
||||||
dl = FakeYDL()
|
dl = FakeYDL()
|
||||||
ie = VineUserIE(dl)
|
ie = VineUserIE(dl)
|
||||||
|
@ -57,6 +57,7 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor):
|
|||||||
(?P<proto>(?:https?:)?//)?
|
(?P<proto>(?:https?:)?//)?
|
||||||
(?:(?:www|(?P<player>player))\.)?
|
(?:(?:www|(?P<player>player))\.)?
|
||||||
vimeo(?P<pro>pro)?\.com/
|
vimeo(?P<pro>pro)?\.com/
|
||||||
|
(?!channels/[^/?#]+/?(?:$|[?#])|album/)
|
||||||
(?:.*?/)?
|
(?:.*?/)?
|
||||||
(?:(?:play_redirect_hls|moogaloop\.swf)\?clip_id=)?
|
(?:(?:play_redirect_hls|moogaloop\.swf)\?clip_id=)?
|
||||||
(?:videos?/)?
|
(?:videos?/)?
|
||||||
@ -153,15 +154,6 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor):
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def suitable(cls, url):
|
|
||||||
if VimeoChannelIE.suitable(url):
|
|
||||||
# Otherwise channel urls like http://vimeo.com/channels/31259 would
|
|
||||||
# match
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return super(VimeoIE, cls).suitable(url)
|
|
||||||
|
|
||||||
def _verify_video_password(self, url, video_id, webpage):
|
def _verify_video_password(self, url, video_id, webpage):
|
||||||
password = self._downloader.params.get('videopassword', None)
|
password = self._downloader.params.get('videopassword', None)
|
||||||
if password is None:
|
if password is None:
|
||||||
@ -380,9 +372,16 @@ def _real_extract(self, url):
|
|||||||
|
|
||||||
class VimeoChannelIE(InfoExtractor):
|
class VimeoChannelIE(InfoExtractor):
|
||||||
IE_NAME = 'vimeo:channel'
|
IE_NAME = 'vimeo:channel'
|
||||||
_VALID_URL = r'(?:https?://)?vimeo\.com/channels/(?P<id>[^/]+)/?(\?.*)?$'
|
_VALID_URL = r'https?://vimeo\.com/channels/(?P<id>[^/?#]+)/?(?:$|[?#])'
|
||||||
_MORE_PAGES_INDICATOR = r'<a.+?rel="next"'
|
_MORE_PAGES_INDICATOR = r'<a.+?rel="next"'
|
||||||
_TITLE_RE = r'<link rel="alternate"[^>]+?title="(.*?)"'
|
_TITLE_RE = r'<link rel="alternate"[^>]+?title="(.*?)"'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'http://vimeo.com/channels/tributes',
|
||||||
|
'info_dict': {
|
||||||
|
'title': 'Vimeo Tributes',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 25,
|
||||||
|
}]
|
||||||
|
|
||||||
def _page_url(self, base_url, pagenum):
|
def _page_url(self, base_url, pagenum):
|
||||||
return '%s/videos/page:%d/' % (base_url, pagenum)
|
return '%s/videos/page:%d/' % (base_url, pagenum)
|
||||||
@ -416,14 +415,15 @@ def _real_extract(self, url):
|
|||||||
|
|
||||||
class VimeoUserIE(VimeoChannelIE):
|
class VimeoUserIE(VimeoChannelIE):
|
||||||
IE_NAME = 'vimeo:user'
|
IE_NAME = 'vimeo:user'
|
||||||
_VALID_URL = r'(?:https?://)?vimeo\.com/(?P<name>[^/]+)(?:/videos|[#?]|$)'
|
_VALID_URL = r'https?://vimeo\.com/(?![0-9]+(?:$|[?#/]))(?P<name>[^/]+)(?:/videos|[#?]|$)'
|
||||||
_TITLE_RE = r'<a[^>]+?class="user">([^<>]+?)</a>'
|
_TITLE_RE = r'<a[^>]+?class="user">([^<>]+?)</a>'
|
||||||
|
_TESTS = [{
|
||||||
@classmethod
|
'url': 'http://vimeo.com/nkistudio/videos',
|
||||||
def suitable(cls, url):
|
'info_dict': {
|
||||||
if VimeoChannelIE.suitable(url) or VimeoIE.suitable(url) or VimeoAlbumIE.suitable(url) or VimeoGroupsIE.suitable(url):
|
'title': 'Nki',
|
||||||
return False
|
},
|
||||||
return super(VimeoUserIE, cls).suitable(url)
|
'playlist_mincount': 66,
|
||||||
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
mobj = re.match(self._VALID_URL, url)
|
mobj = re.match(self._VALID_URL, url)
|
||||||
@ -433,8 +433,15 @@ def _real_extract(self, url):
|
|||||||
|
|
||||||
class VimeoAlbumIE(VimeoChannelIE):
|
class VimeoAlbumIE(VimeoChannelIE):
|
||||||
IE_NAME = 'vimeo:album'
|
IE_NAME = 'vimeo:album'
|
||||||
_VALID_URL = r'(?:https?://)?vimeo\.com/album/(?P<id>\d+)'
|
_VALID_URL = r'https?://vimeo\.com/album/(?P<id>\d+)'
|
||||||
_TITLE_RE = r'<header id="page_header">\n\s*<h1>(.*?)</h1>'
|
_TITLE_RE = r'<header id="page_header">\n\s*<h1>(.*?)</h1>'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'http://vimeo.com/album/2632481',
|
||||||
|
'info_dict': {
|
||||||
|
'title': 'Staff Favorites: November 2013',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 13,
|
||||||
|
}]
|
||||||
|
|
||||||
def _page_url(self, base_url, pagenum):
|
def _page_url(self, base_url, pagenum):
|
||||||
return '%s/page:%d/' % (base_url, pagenum)
|
return '%s/page:%d/' % (base_url, pagenum)
|
||||||
@ -448,6 +455,13 @@ def _real_extract(self, url):
|
|||||||
class VimeoGroupsIE(VimeoAlbumIE):
|
class VimeoGroupsIE(VimeoAlbumIE):
|
||||||
IE_NAME = 'vimeo:group'
|
IE_NAME = 'vimeo:group'
|
||||||
_VALID_URL = r'(?:https?://)?vimeo\.com/groups/(?P<name>[^/]+)'
|
_VALID_URL = r'(?:https?://)?vimeo\.com/groups/(?P<name>[^/]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'http://vimeo.com/groups/rolexawards',
|
||||||
|
'info_dict': {
|
||||||
|
'title': 'Rolex Awards for Enterprise',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 73,
|
||||||
|
}]
|
||||||
|
|
||||||
def _extract_list_title(self, webpage):
|
def _extract_list_title(self, webpage):
|
||||||
return self._og_search_title(webpage)
|
return self._og_search_title(webpage)
|
||||||
@ -497,6 +511,10 @@ class VimeoWatchLaterIE(VimeoBaseInfoExtractor, VimeoChannelIE):
|
|||||||
_VALID_URL = r'https?://vimeo\.com/home/watchlater|:vimeowatchlater'
|
_VALID_URL = r'https?://vimeo\.com/home/watchlater|:vimeowatchlater'
|
||||||
_LOGIN_REQUIRED = True
|
_LOGIN_REQUIRED = True
|
||||||
_TITLE_RE = r'href="/home/watchlater".*?>(.*?)<'
|
_TITLE_RE = r'href="/home/watchlater".*?>(.*?)<'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'http://vimeo.com/home/watchlater',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
self._login()
|
self._login()
|
||||||
|
Loading…
Reference in New Issue
Block a user