2
0
Эх сурвалжийг харах

[generic] Detect ooyala videos (fixes #2013)

Jaime Marquínez Ferrándiz 11 жил өмнө
parent
commit
c0d0b01f0e

+ 4 - 2
youtube_dl/extractor/common.py

@@ -263,7 +263,8 @@ class InfoExtractor(object):
         self.to_screen(u'Logging in')
         self.to_screen(u'Logging in')
 
 
     #Methods for following #608
     #Methods for following #608
-    def url_result(self, url, ie=None, video_id=None):
+    @staticmethod
+    def url_result(url, ie=None, video_id=None):
         """Returns a url that points to a page that should be processed"""
         """Returns a url that points to a page that should be processed"""
         #TODO: ie should be the class used for getting the info
         #TODO: ie should be the class used for getting the info
         video_info = {'_type': 'url',
         video_info = {'_type': 'url',
@@ -272,7 +273,8 @@ class InfoExtractor(object):
         if video_id is not None:
         if video_id is not None:
             video_info['id'] = video_id
             video_info['id'] = video_id
         return video_info
         return video_info
-    def playlist_result(self, entries, playlist_id=None, playlist_title=None):
+    @staticmethod
+    def playlist_result(entries, playlist_id=None, playlist_title=None):
         """Returns a playlist"""
         """Returns a playlist"""
         video_info = {'_type': 'playlist',
         video_info = {'_type': 'playlist',
                       'entries': entries}
                       'entries': entries}

+ 17 - 1
youtube_dl/extractor/generic.py

@@ -17,6 +17,7 @@ from ..utils import (
     url_basename,
     url_basename,
 )
 )
 from .brightcove import BrightcoveIE
 from .brightcove import BrightcoveIE
+from .ooyala import OoyalaIE
 
 
 
 
 class GenericIE(InfoExtractor):
 class GenericIE(InfoExtractor):
@@ -83,7 +84,17 @@ class GenericIE(InfoExtractor):
                 u'title': u'trailer',
                 u'title': u'trailer',
                 u'upload_date': u'20100513',
                 u'upload_date': u'20100513',
             }
             }
-        }
+        },
+        # ooyala video
+        {
+            u'url': u'http://www.rollingstone.com/music/videos/norwegian-dj-cashmere-cat-goes-spartan-on-with-me-premiere-20131219',
+            u'md5': u'5644c6ca5d5782c1d0d350dad9bd840c',
+            u'info_dict': {
+                u'id': u'BwY2RxaTrTkslxOfcan0UCf0YqyvWysJ',
+                u'ext': u'mp4',
+                u'title': u'2cc213299525360.mov', #that's what we get
+            },
+        },
     ]
     ]
 
 
     def report_download_webpage(self, video_id):
     def report_download_webpage(self, video_id):
@@ -277,6 +288,11 @@ class GenericIE(InfoExtractor):
         if mobj is not None:
         if mobj is not None:
             return self.url_result(mobj.group('url'))
             return self.url_result(mobj.group('url'))
 
 
+        # Look for Ooyala videos
+        mobj = re.search(r'player.ooyala.com/[^"?]+\?[^"]*?(?:embedCode|ec)=([^"&]+)', webpage)
+        if mobj is not None:
+            return OoyalaIE._build_url_result(mobj.group(1))
+
         # Start with something easy: JW Player in SWFObject
         # Start with something easy: JW Player in SWFObject
         mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage)
         mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage)
         if mobj is None:
         if mobj is None:

+ 5 - 0
youtube_dl/extractor/ooyala.py

@@ -22,6 +22,11 @@ class OoyalaIE(InfoExtractor):
     def _url_for_embed_code(embed_code):
     def _url_for_embed_code(embed_code):
         return 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code
         return 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code
 
 
+    @classmethod
+    def _build_url_result(cls, embed_code):
+        return cls.url_result(cls._url_for_embed_code(embed_code),
+            ie=cls.ie_key())
+
     def _extract_result(self, info, more_info):
     def _extract_result(self, info, more_info):
         return {'id': info['embedCode'],
         return {'id': info['embedCode'],
                 'ext': 'mp4',
                 'ext': 'mp4',