Browse Source

[generic] Add support for rutube embeds

Sergey M․ 8 years ago
parent
commit
eb3079b6ce
2 changed files with 30 additions and 0 deletions
  1. 24 0
      youtube_dl/extractor/generic.py
  2. 6 0
      youtube_dl/extractor/rutube.py

+ 24 - 0
youtube_dl/extractor/generic.py

@@ -84,6 +84,7 @@ from .twentymin import TwentyMinutenIE
 from .ustream import UstreamIE
 from .ustream import UstreamIE
 from .openload import OpenloadIE
 from .openload import OpenloadIE
 from .videopress import VideoPressIE
 from .videopress import VideoPressIE
+from .rutube import RutubeIE
 
 
 
 
 class GenericIE(InfoExtractor):
 class GenericIE(InfoExtractor):
@@ -1502,6 +1503,23 @@ class GenericIE(InfoExtractor):
             },
             },
             'add_ie': [VideoPressIE.ie_key()],
             'add_ie': [VideoPressIE.ie_key()],
         },
         },
+        {
+            # Rutube embed
+            'url': 'http://magazzino.friday.ru/videos/vipuski/kazan-2',
+            'info_dict': {
+                'id': '9b3d5bee0a8740bf70dfd29d3ea43541',
+                'ext': 'flv',
+                'title': 'Магаззино: Казань 2',
+                'description': 'md5:99bccdfac2269f0e8fdbc4bbc9db184a',
+                'uploader': 'Магаззино',
+                'upload_date': '20170228',
+                'uploader_id': '996642',
+            },
+            'params': {
+                'skip_download': True,
+            },
+            'add_ie': [RutubeIE.ie_key()],
+        },
         {
         {
             # ThePlatform embedded with whitespaces in URLs
             # ThePlatform embedded with whitespaces in URLs
             'url': 'http://www.golfchannel.com/topics/shows/golftalkcentral.htm',
             'url': 'http://www.golfchannel.com/topics/shows/golftalkcentral.htm',
@@ -2480,6 +2498,12 @@ class GenericIE(InfoExtractor):
             return _playlist_from_matches(
             return _playlist_from_matches(
                 videopress_urls, ie=VideoPressIE.ie_key())
                 videopress_urls, ie=VideoPressIE.ie_key())
 
 
+        # Look for Rutube embeds
+        rutube_urls = RutubeIE._extract_urls(webpage)
+        if rutube_urls:
+            return _playlist_from_matches(
+                rutube_urls, ie=RutubeIE.ie_key())
+
         # Looking for http://schema.org/VideoObject
         # Looking for http://schema.org/VideoObject
         json_ld = self._search_json_ld(
         json_ld = self._search_json_ld(
             webpage, video_id, default={}, expected_type='VideoObject')
             webpage, video_id, default={}, expected_type='VideoObject')

+ 6 - 0
youtube_dl/extractor/rutube.py

@@ -44,6 +44,12 @@ class RutubeIE(InfoExtractor):
         'only_matching': True,
         'only_matching': True,
     }]
     }]
 
 
+    @staticmethod
+    def _extract_urls(webpage):
+        return [mobj.group('url') for mobj in re.finditer(
+            r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//rutube\.ru/embed/[\da-z]{32}.*?)\1',
+            webpage)]
+
     def _real_extract(self, url):
     def _real_extract(self, url):
         video_id = self._match_id(url)
         video_id = self._match_id(url)
         video = self._download_json(
         video = self._download_json(