Fix metacafe.com downloads for some videos (fixes issue #189)
authorRicardo Garcia <sarbalap+freshmeat@gmail.com>
Thu, 12 Aug 2010 17:15:26 +0000 (19:15 +0200)
committerRicardo Garcia <sarbalap+freshmeat@gmail.com>
Sun, 31 Oct 2010 10:28:41 +0000 (11:28 +0100)
youtube-dl

index 717d97d9673efc775bfdab9e873ec30bcaec0f98..e9211b240c44375ec3756cdfae27c907891a9635 100755 (executable)
@@ -1036,20 +1036,30 @@ class MetacafeIE(InfoExtractor):
                # Extract URL, uploader and title from webpage
                self.report_extraction(video_id)
                mobj = re.search(r'(?m)&mediaURL=([^&]+)', webpage)
-               if mobj is None:
-                       self._downloader.trouble(u'ERROR: unable to extract media URL')
-                       return
-               mediaURL = urllib.unquote(mobj.group(1))
-
-               # Extract gdaKey if available
-               mobj = re.search(r'(?m)&gdaKey=(.*?)&', webpage)
-               if mobj is None:
-                       video_url = mediaURL
-                       #self._downloader.trouble(u'ERROR: unable to extract gdaKey')
-                       #return
+               if mobj is not None:
+                       mediaURL = urllib.unquote(mobj.group(1))
+                       
+                       # Extract gdaKey if available
+                       mobj = re.search(r'(?m)&gdaKey=(.*?)&', webpage)
+                       if mobj is None:
+                               video_url = mediaURL
+                       else:
+                               gdaKey = mobj.group(1)
+                               video_url = '%s?__gda__=%s' % (mediaURL, gdaKey)
                else:
-                       gdaKey = mobj.group(1)
-                       video_url = '%s?__gda__=%s' % (mediaURL, gdaKey)
+                       mobj = re.search(r' name="flashvars" value="(.*?)"', webpage)
+                       if mobj is None:
+                               self._downloader.trouble(u'ERROR: unable to extract media URL')
+                               return
+                       vardict = parse_qs(mobj.group(1))
+                       if 'mediaData' not in vardict:
+                               self._downloader.trouble(u'ERROR: unable to extract media URL')
+                               return
+                       mobj = re.search(r'"mediaURL":"(http.*?)","key":"(.*?)"', vardict['mediaData'][0])
+                       if mobj is None:
+                               self._downloader.trouble(u'ERROR: unable to extract media URL')
+                               return
+                       video_url = '%s?__gda__=%s' % (mobj.group(1).replace('\\/', '/'), mobj.group(2))
 
                mobj = re.search(r'(?im)<title>(.*) - Video</title>', webpage)
                if mobj is None: