[playvid] Simplify (#2539)
authorPhilipp Hagemeister <phihag@phihag.de>
Mon, 10 Mar 2014 19:55:47 +0000 (20:55 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Mon, 10 Mar 2014 19:55:47 +0000 (20:55 +0100)
youtube_dl/YoutubeDL.py
youtube_dl/extractor/playvid.py

index 1db27315c8b79fa0f03a652452dae57de6b72e4e..63ed08abfc17bdb65a6f2575af09a37296e17729 100644 (file)
@@ -701,8 +701,11 @@ class YoutubeDL(object):
         else:
             formats = info_dict['formats']
 
+        if not formats:
+            raise ExtractorError('No video formats found!')
+
         # We check that all the formats have the format and format_id fields
-        for (i, format) in enumerate(formats):
+        for i, format in enumerate(formats):
             if format.get('format_id') is None:
                 format['format_id'] = compat_str(i)
             if format.get('format') is None:
index a74f8f675b660855967c3498197da9e6aae65a85..b1322f13f8b62a4618b1f857dadf0829b9752238 100644 (file)
@@ -5,17 +5,17 @@ import re
 from .common import InfoExtractor
 from ..utils import (
     compat_urllib_parse,
-    determine_ext,
 )
 
-class PlayvidIE(InfoExtractor):
 
-    _VALID_URL = r'^(?:https?://)?www\.playvid\.com/watch(\?v=|/)(?P<id>.+?)(#|$)'
+class PlayvidIE(InfoExtractor):
+    _VALID_URL = r'^https?://www\.playvid\.com/watch(\?v=|/)(?P<id>.+?)(?:#|$)'
     _TEST = {
         'url': 'http://www.playvid.com/watch/agbDDi7WZTV',
-        'file': 'agbDDi7WZTV.mp4',
         'md5': '44930f8afa616efdf9482daf4fe53e1e',
         'info_dict': {
+            'id': 'agbDDi7WZTV',
+            'ext': 'mp4',
             'title': 'Michelle Lewin in Miami Beach',
             'duration': 240,
             'age_limit': 18,
@@ -28,46 +28,41 @@ class PlayvidIE(InfoExtractor):
 
         webpage = self._download_webpage(url, video_id)
 
-        self.report_extraction(video_id)
-
         video_title = None
         duration = None
         video_thumbnail = None
         formats = []
 
         # most of the information is stored in the flashvars
-        flashvars_match = re.search(r'flashvars="(.+?)"',webpage)
-
-        if flashvars_match:
-            infos = compat_urllib_parse.unquote(flashvars_match.group(1)).split(r'&amp;')
-            for info in infos:
-                videovars_match = re.match(r'^video_vars\[(.+?)\]=(.+?)$',info)
-                if videovars_match:
-                    key = videovars_match.group(1)
-                    val = videovars_match.group(2)
+        flashvars = self._html_search_regex(
+            r'flashvars="(.+?)"', webpage, 'flashvars')
 
-                    if key == 'title':
-                        video_title = val.replace('+',' ')
-                    if key == 'duration':
-                        try:
-                            duration = val
-                        except ValueError:
-                            duration = None
-                    if key == 'big_thumb':
-                        video_thumbnail = val
+        infos = compat_urllib_parse.unquote(flashvars).split(r'&')
+        for info in infos:
+            videovars_match = re.match(r'^video_vars\[(.+?)\]=(.+?)$', info)
+            if videovars_match:
+                key = videovars_match.group(1)
+                val = videovars_match.group(2)
 
-                    videourl_match = re.match(r'^video_urls\]\[(?P<resolution>\d+)p',key)
-                    if videourl_match:
-                        resolution = int(videourl_match.group('resolution'))
-                        formats.append({
-                            'resolution': resolution,            # 360, 480, ...
-                            'ext': determine_ext(val),
-                            'url': val
-                        })
+                if key == 'title':
+                    video_title = compat_urllib_parse.unquote_plus(val)
+                if key == 'duration':
+                    try:
+                        duration = int(val)
+                    except ValueError:
+                        pass
+                if key == 'big_thumb':
+                    video_thumbnail = val
 
-        # fatal error, if no download url is found
-        if len(formats) == 0:
-            raise ExtractorError,'no video url found'
+                videourl_match = re.match(
+                    r'^video_urls\]\[(?P<resolution>[0-9]+)p', key)
+                if videourl_match:
+                    height = int(videourl_match.group('resolution'))
+                    formats.append({
+                        'height': height,
+                        'url': val,
+                    })
+        self._sort_formats(formats)
 
         # Extract title - should be in the flashvars; if not, look elsewhere
         if video_title is None: