[vimeo] Fix pro videos and player.vimeo.com urls
authorJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Wed, 23 Oct 2013 12:38:03 +0000 (14:38 +0200)
committerJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Wed, 23 Oct 2013 12:38:03 +0000 (14:38 +0200)
The old process can still be used for those videos.
Added RegexNotFoundError, which is raised by _search_regex if it can't extract the info.

youtube_dl/extractor/common.py
youtube_dl/extractor/vimeo.py
youtube_dl/utils.py

index 7d7ce5d98a7ef21ccb1fe6897ebad9dd996cc649..aaa5c24c8565fffb85295188daf7bbd52f5aae89 100644 (file)
@@ -14,6 +14,7 @@ from ..utils import (
     clean_html,
     compiled_regex_type,
     ExtractorError,
+    RegexNotFoundError,
     unescapeHTML,
 )
 
@@ -231,7 +232,7 @@ class InfoExtractor(object):
         Perform a regex search on the given string, using a single or a list of
         patterns returning the first matching group.
         In case of failure return a default value or raise a WARNING or a
-        ExtractorError, depending on fatal, specifying the field name.
+        RegexNotFoundError, depending on fatal, specifying the field name.
         """
         if isinstance(pattern, (str, compat_str, compiled_regex_type)):
             mobj = re.search(pattern, string, flags)
@@ -251,7 +252,7 @@ class InfoExtractor(object):
         elif default is not None:
             return default
         elif fatal:
-            raise ExtractorError(u'Unable to extract %s' % _name)
+            raise RegexNotFoundError(u'Unable to extract %s' % _name)
         else:
             self._downloader.report_warning(u'unable to extract %s; '
                 u'please report this issue on http://yt-dl.org/bug' % _name)
index bf48671b32a13db11eb52758660702fd3c035c04..ad2f75d6bb2075aef326d8b06839edb9aaf2f3ee 100644 (file)
@@ -10,6 +10,7 @@ from ..utils import (
     clean_html,
     get_element_by_attribute,
     ExtractorError,
+    RegexNotFoundError,
     std_headers,
     unsmuggle_url,
 )
@@ -133,6 +134,11 @@ class VimeoIE(InfoExtractor):
                 r' data-config-url="(.+?)"', webpage, u'config URL')
             config_json = self._download_webpage(config_url, video_id)
             config = json.loads(config_json)
+        except RegexNotFoundError:
+            # For pro videos or player.vimeo.com urls
+            config = self._search_regex([r' = {config:({.+?}),assets:', r'c=({.+?);'],
+                webpage, u'info section', flags=re.DOTALL)
+            config = json.loads(config)
         except Exception as e:
             if re.search('The creator of this video has not given you permission to embed it on this domain.', webpage):
                 raise ExtractorError(u'The author has restricted the access to this video, try with the "--referer" option')
index bfb8f6bcd971dad03d5236c8e607b59ff81c667a..1d9785341ec685071ea8fcc4846029a3e889bc72 100644 (file)
@@ -572,6 +572,11 @@ class ExtractorError(Exception):
         return u''.join(traceback.format_tb(self.traceback))
 
 
+class RegexNotFoundError(ExtractorError):
+    """Error when a regex didn't match"""
+    pass
+
+
 class DownloadError(Exception):
     """Download Error exception.