diff options
| author | remitamine <remitamine@gmail.com> | 2016-05-24 20:10:12 +0100 | 
|---|---|---|
| committer | remitamine <remitamine@gmail.com> | 2016-05-24 20:10:12 +0100 | 
| commit | 1de32771e1d3f89ef2738883b304ce52a5ecf303 (patch) | |
| tree | 1670e61db1d8d5ed367ad00f167fc5ff45554f0a | |
| parent | 688c634b7d95a20c6081b202427a9e5fd7f36422 (diff) | |
[eyedotv] Add new extractor(closes #9582)
| -rw-r--r-- | youtube_dl/extractor/extractors.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/eyedotv.py | 64 | 
2 files changed, 65 insertions, 0 deletions
diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index f9fed18f6..05561149a 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -231,6 +231,7 @@ from .everyonesmixtape import EveryonesMixtapeIE  from .exfm import ExfmIE  from .expotv import ExpoTVIE  from .extremetube import ExtremeTubeIE +from .eyedotv import EyedoTVIE  from .facebook import FacebookIE  from .faz import FazIE  from .fc2 import FC2IE diff --git a/youtube_dl/extractor/eyedotv.py b/youtube_dl/extractor/eyedotv.py new file mode 100644 index 000000000..2f3035147 --- /dev/null +++ b/youtube_dl/extractor/eyedotv.py @@ -0,0 +1,64 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor +from ..utils import ( +    xpath_text, +    parse_duration, +    ExtractorError, +) + + +class EyedoTVIE(InfoExtractor): +    _VALID_URL = r'https?://(?:www\.)?eyedo\.tv/[^/]+/(?:#!/)?Live/Detail/(?P<id>[0-9]+)' +    _TEST = { +        'url': 'https://www.eyedo.tv/en-US/#!/Live/Detail/16301', +        'md5': 'ba14f17995cdfc20c36ba40e21bf73f7', +        'info_dict': { +            'id': '16301', +            'ext': 'mp4', +            'title': 'Journée du conseil scientifique de l\'Afnic 2015', +            'description': 'md5:4abe07293b2f73efc6e1c37028d58c98', +            'uploader': 'Afnic Live', +            'uploader_id': '8023', +        } +    } +    _ROOT_URL = 'http://live.eyedo.net:1935/' + +    def _real_extract(self, url): +        video_id = self._match_id(url) +        video_data = self._download_xml('http://eyedo.tv/api/live/GetLive/%s' % video_id, video_id) + +        def _add_ns(path): +            return self._xpath_ns(path, 'http://schemas.datacontract.org/2004/07/EyeDo.Core.Implementation.Web.ViewModels.Api') + +        title = xpath_text(video_data, _add_ns('Titre'), 'title', True) +        state_live_code = xpath_text(video_data, _add_ns('StateLiveCode'), 'title', True) +        if state_live_code == 'avenir': +            raise ExtractorError( +                '%s said: We\'re sorry, but this video is not yet available.' % self.IE_NAME, +                expected=True) + +        is_live = state_live_code == 'live' +        m3u8_url = None +        # http://eyedo.tv/Content/Html5/Scripts/html5view.js +        if is_live: +            if xpath_text(video_data, 'Cdn') == 'true': +                m3u8_url = 'http://rrr.sz.xlcdn.com/?account=eyedo&file=A%s&type=live&service=wowza&protocol=http&output=playlist.m3u8' % video_id +            else: +                m3u8_url = self._ROOT_URL + 'w/%s/eyedo_720p/playlist.m3u8' % video_id +        else: +            m3u8_url = self._ROOT_URL + 'replay-w/%s/mp4:%s.mp4/playlist.m3u8' % (video_id, video_id) + +        return { +            'id': video_id, +            'title': title, +            'formats': self._extract_m3u8_formats( +                m3u8_url, video_id, 'mp4', 'm3u8' if is_live else 'm3u8_native'), +            'description': xpath_text(video_data, _add_ns('Description')), +            'duration': parse_duration(xpath_text(video_data, _add_ns('Duration'))), +            'uploader': xpath_text(video_data, _add_ns('Createur')), +            'uploader_id': xpath_text(video_data, _add_ns('CreateurId')), +            'chapter': xpath_text(video_data, _add_ns('ChapitreTitre')), +            'chapter_id': xpath_text(video_data, _add_ns('ChapitreId')), +        }  | 
