diff options
| -rw-r--r-- | youtube_dl/extractor/generic.py | 6 | ||||
| -rw-r--r-- | youtube_dl/extractor/vimeo.py | 36 | ||||
| -rw-r--r-- | youtube_dl/extractor/vk.py | 2 | 
3 files changed, 24 insertions, 20 deletions
| diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 9ea306e3a..8ef8fb5f4 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -1754,9 +1754,9 @@ class GenericIE(InfoExtractor):          if matches:              return _playlist_from_matches(matches, ie='RtlNl') -        vimeo_url = VimeoIE._extract_vimeo_url(url, webpage) -        if vimeo_url is not None: -            return self.url_result(vimeo_url) +        vimeo_urls = VimeoIE._extract_urls(url, webpage) +        if vimeo_urls: +            return _playlist_from_matches(vimeo_urls, ie=VimeoIE.ie_key())          vid_me_embed_url = self._search_regex(              r'src=[\'"](https?://vid\.me/[^\'"]+)[\'"]', diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index 309a47bf0..ea8fc5908 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -355,23 +355,27 @@ class VimeoIE(VimeoBaseInfoExtractor):          return smuggle_url(url, {'http_headers': {'Referer': referrer_url}})      @staticmethod -    def _extract_vimeo_url(url, webpage): +    def _extract_urls(url, webpage): +        urls = []          # Look for embedded (iframe) Vimeo player -        mobj = re.search( -            r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//player\.vimeo\.com/video/.+?)\1', webpage) -        if mobj: -            player_url = unescapeHTML(mobj.group('url')) -            return VimeoIE._smuggle_referrer(player_url, url) -        # Look for embedded (swf embed) Vimeo player -        mobj = re.search( -            r'<embed[^>]+?src="((?:https?:)?//(?:www\.)?vimeo\.com/moogaloop\.swf.+?)"', webpage) -        if mobj: -            return mobj.group(1) -        # Look more for non-standard embedded Vimeo player -        mobj = re.search( -            r'<video[^>]+src=(?P<q1>[\'"])(?P<url>(?:https?:)?//(?:www\.)?vimeo\.com/[0-9]+)(?P=q1)', webpage) -        if mobj: -            return mobj.group('url') +        for mobj in re.finditer( +            r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//player\.vimeo\.com/video/.+?)\1', webpage): +            urls.append(VimeoIE._smuggle_referrer(unescapeHTML(mobj.group('url')), url)) +        PLAIN_EMBED_RE = ( +            # Look for embedded (swf embed) Vimeo player +            r'<embed[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?vimeo\.com/moogaloop\.swf.+?)\1', +            # Look more for non-standard embedded Vimeo player +            r'<video[^>]+src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?vimeo\.com/[0-9]+)\1', +        ) +        for embed_re in PLAIN_EMBED_RE: +            for mobj in re.finditer(embed_re, webpage): +                urls.append(mobj.group('url')) +        return urls + +    @staticmethod +    def _extract_url(url, webpage): +        urls = VimeoIE._extract_urls(url, webpage) +        return urls[0] if urls else None      def _verify_player_video_password(self, url, video_id):          password = self._downloader.params.get('videopassword') diff --git a/youtube_dl/extractor/vk.py b/youtube_dl/extractor/vk.py index ac77bc623..df43ba867 100644 --- a/youtube_dl/extractor/vk.py +++ b/youtube_dl/extractor/vk.py @@ -341,7 +341,7 @@ class VKIE(VKBaseIE):          if youtube_url:              return self.url_result(youtube_url, 'Youtube') -        vimeo_url = VimeoIE._extract_vimeo_url(url, info_page) +        vimeo_url = VimeoIE._extract_url(url, info_page)          if vimeo_url is not None:              return self.url_result(vimeo_url) | 
