diff options
| author | Sergey M․ <dstftw@gmail.com> | 2014-10-07 22:23:22 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2014-10-07 22:23:22 +0700 | 
| commit | b3826f6c8dfc19c9484275efb923c40e8634f1fe (patch) | |
| tree | f129a1d789497f035db3d678796cd03cc5c392e1 | |
| parent | 642b76ac1513f7aaa3469e03078ab2fb3d3187f4 (diff) | |
| parent | 7bc8780c576505fd87a5c85ff1f50ef2e8841d88 (diff) | |
Merge branch 'lenaten-walla'
| -rw-r--r-- | test/test_subtitles.py | 28 | ||||
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/walla.py | 89 | 
3 files changed, 118 insertions, 0 deletions
| diff --git a/test/test_subtitles.py b/test/test_subtitles.py index 48c302198..eb5f2f8dd 100644 --- a/test/test_subtitles.py +++ b/test/test_subtitles.py @@ -15,6 +15,7 @@ from youtube_dl.extractor import (      DailymotionIE,      TEDIE,      VimeoIE, +    WallaIE,  ) @@ -279,5 +280,32 @@ class TestVimeoSubtitles(BaseTestSubtitles):              self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang) +class TestWallsSubtitles(BaseTestSubtitles): +    url = 'http://vod.walla.co.il/movie/2705958/the-yes-men' +    IE = WallaIE + +    def test_list_subtitles(self): +        self.DL.expect_warning(u'Automatic Captions not supported by this server') +        self.DL.params['listsubtitles'] = True +        info_dict = self.getInfoDict() +        self.assertEqual(info_dict, None) + +    def test_allsubtitles(self): +        self.DL.expect_warning(u'Automatic Captions not supported by this server') +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['heb'])) +        self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920') + +    def test_nosubtitles(self): +        self.DL.expect_warning(u'video doesn\'t have subtitles') +        self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one' +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(len(subtitles), 0) + +  if __name__ == '__main__':      unittest.main() diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index d118daa68..76726305a 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -440,6 +440,7 @@ from .vporn import VpornIE  from .vube import VubeIE  from .vuclip import VuClipIE  from .vulture import VultureIE +from .walla import WallaIE  from .washingtonpost import WashingtonPostIE  from .wat import WatIE  from .wayofthemaster import WayOfTheMasterIE diff --git a/youtube_dl/extractor/walla.py b/youtube_dl/extractor/walla.py new file mode 100644 index 000000000..672bda7a7 --- /dev/null +++ b/youtube_dl/extractor/walla.py @@ -0,0 +1,89 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re + +from .subtitles import SubtitlesInfoExtractor +from ..utils import ( +    xpath_text, +    int_or_none, +) + + +class WallaIE(SubtitlesInfoExtractor): +    _VALID_URL = r'http://vod\.walla\.co\.il/[^/]+/(?P<id>\d+)/(?P<display_id>.+)' +    _TEST = { +        'url': 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one', +        'info_dict': { +            'id': '2642630', +            'display_id': 'one-direction-all-for-one', +            'ext': 'flv', +            'title': 'וואן דיירקשן: ההיסטריה', +            'description': 'md5:de9e2512a92442574cdb0913c49bc4d8', +            'thumbnail': 're:^https?://.*\.jpg', +            'duration': 3600, +        }, +        'params': { +            # rtmp download +            'skip_download': True, +        } +    } + +    _SUBTITLE_LANGS = { +        'עברית': 'heb', +    } + +    def _real_extract(self, url): +        mobj = re.match(self._VALID_URL, url) +        video_id = mobj.group('id') +        display_id = mobj.group('display_id') + +        video = self._download_xml( +            'http://video2.walla.co.il/?w=null/null/%s/@@/video/flv_pl' % video_id, +            display_id) + +        item = video.find('./items/item') + +        title = xpath_text(item, './title', 'title') +        description = xpath_text(item, './synopsis', 'description') +        thumbnail = xpath_text(item, './preview_pic', 'thumbnail') +        duration = int_or_none(xpath_text(item, './duration', 'duration')) + +        subtitles = {} +        for subtitle in item.findall('./subtitles/subtitle'): +            lang = xpath_text(subtitle, './title') +            subtitles[self._SUBTITLE_LANGS.get(lang, lang)] = xpath_text(subtitle, './src') + +        if self._downloader.params.get('listsubtitles', False): +            self._list_available_subtitles(video_id, subtitles) +            return + +        subtitles = self.extract_subtitles(video_id, subtitles) + +        formats = [] +        for quality in item.findall('./qualities/quality'): +            format_id = xpath_text(quality, './title') +            fmt = { +                'url': 'rtmp://wafla.walla.co.il/vod', +                'play_path': xpath_text(quality, './src'), +                'player_url': 'http://isc.walla.co.il/w9/swf/video_swf/vod/WallaMediaPlayerAvod.swf', +                'page_url': url, +                'ext': 'flv', +                'format_id': xpath_text(quality, './title'), +            } +            m = re.search(r'^(?P<height>\d+)[Pp]', format_id) +            if m: +                fmt['height'] = int(m.group('height')) +            formats.append(fmt) +        self._sort_formats(formats) + +        return { +            'id': video_id, +            'display_id': display_id, +            'title': title, +            'description': description, +            'thumbnail': thumbnail, +            'duration': duration, +            'formats': formats, +            'subtitles': subtitles, +        } | 
