diff options
| -rw-r--r-- | test/test_playlists.py | 32 | ||||
| -rw-r--r-- | youtube_dl/extractor/vimeo.py | 54 | 
2 files changed, 36 insertions, 50 deletions
| diff --git a/test/test_playlists.py b/test/test_playlists.py index 0137b8399..a02fdefde 100644 --- a/test/test_playlists.py +++ b/test/test_playlists.py @@ -87,38 +87,6 @@ class TestPlaylists(unittest.TestCase):          assertGreaterEqual(self, len(result['entries']), 100)          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):          dl = FakeYDL()          ie = VineUserIE(dl) diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index 87259f525..bc01d7fbf 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -57,6 +57,7 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor):          (?P<proto>(?:https?:)?//)?          (?:(?:www|(?P<player>player))\.)?          vimeo(?P<pro>pro)?\.com/ +        (?!channels/[^/?#]+/?(?:$|[?#])|album/)          (?:.*?/)?          (?:(?:play_redirect_hls|moogaloop\.swf)\?clip_id=)?          (?: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):          password = self._downloader.params.get('videopassword', None)          if password is None: @@ -380,9 +372,16 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor):  class VimeoChannelIE(InfoExtractor):      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"'      _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):          return '%s/videos/page:%d/' % (base_url, pagenum) @@ -416,14 +415,15 @@ class VimeoChannelIE(InfoExtractor):  class VimeoUserIE(VimeoChannelIE):      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>' - -    @classmethod -    def suitable(cls, url): -        if VimeoChannelIE.suitable(url) or VimeoIE.suitable(url) or VimeoAlbumIE.suitable(url) or VimeoGroupsIE.suitable(url): -            return False -        return super(VimeoUserIE, cls).suitable(url) +    _TESTS = [{ +        'url': 'http://vimeo.com/nkistudio/videos', +        'info_dict': { +            'title': 'Nki', +        }, +        'playlist_mincount': 66, +    }]      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url) @@ -433,8 +433,15 @@ class VimeoUserIE(VimeoChannelIE):  class VimeoAlbumIE(VimeoChannelIE):      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>' +    _TESTS = [{ +        'url': 'http://vimeo.com/album/2632481', +        'info_dict': { +            'title': 'Staff Favorites: November 2013', +        }, +        'playlist_mincount': 13, +    }]      def _page_url(self, base_url, pagenum):          return '%s/page:%d/' % (base_url, pagenum) @@ -448,6 +455,13 @@ class VimeoAlbumIE(VimeoChannelIE):  class VimeoGroupsIE(VimeoAlbumIE):      IE_NAME = 'vimeo:group'      _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):          return self._og_search_title(webpage) @@ -497,6 +511,10 @@ class VimeoWatchLaterIE(VimeoBaseInfoExtractor, VimeoChannelIE):      _VALID_URL = r'https?://vimeo\.com/home/watchlater|:vimeowatchlater'      _LOGIN_REQUIRED = True      _TITLE_RE = r'href="/home/watchlater".*?>(.*?)<' +    _TESTS = [{ +        'url': 'http://vimeo.com/home/watchlater', +        'only_matching': True, +    }]      def _real_initialize(self):          self._login() | 
