diff options
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/mwave.py | 58 | ||||
| -rw-r--r-- | youtube_dl/extractor/videobam.py | 81 | 
3 files changed, 59 insertions, 82 deletions
| diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 86ea0576a..1c53a5632 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -345,6 +345,7 @@ from .muenchentv import MuenchenTVIE  from .musicplayon import MusicPlayOnIE  from .musicvault import MusicVaultIE  from .muzu import MuzuTVIE +from .mwave import MwaveIE  from .myspace import MySpaceIE, MySpaceAlbumIE  from .myspass import MySpassIE  from .myvi import MyviIE @@ -700,7 +701,6 @@ from .vgtv import (  from .vh1 import VH1IE  from .vice import ViceIE  from .viddler import ViddlerIE -from .videobam import VideoBamIE  from .videodetective import VideoDetectiveIE  from .videolecturesnet import VideoLecturesNetIE  from .videofyme import VideofyMeIE diff --git a/youtube_dl/extractor/mwave.py b/youtube_dl/extractor/mwave.py new file mode 100644 index 000000000..66b523197 --- /dev/null +++ b/youtube_dl/extractor/mwave.py @@ -0,0 +1,58 @@ +from __future__ import unicode_literals + +from .common import InfoExtractor +from ..compat import compat_str +from ..utils import ( +    int_or_none, +    parse_duration, +) + + +class MwaveIE(InfoExtractor): +    _VALID_URL = r'https?://mwave\.interest\.me/mnettv/videodetail\.m\?searchVideoDetailVO\.clip_id=(?P<id>[0-9]+)' +    _TEST = { +        'url': 'http://mwave.interest.me/mnettv/videodetail.m?searchVideoDetailVO.clip_id=168859', +        'md5': 'c930e27b7720aaa3c9d0018dfc8ff6cc', +        'info_dict': { +            'id': '168859', +            'ext': 'flv', +            'title': '[M COUNTDOWN] SISTAR - SHAKE IT', +            'thumbnail': 're:^https?://.*\.jpg$', +            'uploader': 'M COUNTDOWN', +            'duration': 206, +            'view_count': int, +        } +    } + +    def _real_extract(self, url): +        video_id = self._match_id(url) + +        vod_info = self._download_json( +            'http://mwave.interest.me/onair/vod_info.m?vodtype=CL§orid=&endinfo=Y&id=%s' % video_id, +            video_id, 'Download vod JSON') + +        formats = [] +        for num, cdn_info in enumerate(vod_info['cdn']): +            stream_url = cdn_info.get('url') +            if not stream_url: +                continue +            stream_name = cdn_info.get('name') or compat_str(num) +            f4m_stream = self._download_json( +                stream_url, video_id, +                'Download %s stream JSON' % stream_name) +            f4m_url = f4m_stream.get('fileurl') +            if not f4m_url: +                continue +            formats.extend( +                self._extract_f4m_formats(f4m_url + '&hdcore=3.0.3', video_id, f4m_id=stream_name)) +        self._sort_formats(formats) + +        return { +            'id': video_id, +            'title': vod_info['title'], +            'thumbnail': vod_info.get('cover'), +            'uploader': vod_info.get('program_title'), +            'duration': parse_duration(vod_info.get('time')), +            'view_count': int_or_none(vod_info.get('hit')), +            'formats': formats, +        } diff --git a/youtube_dl/extractor/videobam.py b/youtube_dl/extractor/videobam.py deleted file mode 100644 index 0eb3d9414..000000000 --- a/youtube_dl/extractor/videobam.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import unicode_literals - -import re -import json - -from .common import InfoExtractor -from ..utils import int_or_none - - -class VideoBamIE(InfoExtractor): -    _VALID_URL = r'http://(?:www\.)?videobam\.com/(?:videos/download/)?(?P<id>[a-zA-Z]+)' - -    _TESTS = [ -        { -            'url': 'http://videobam.com/OiJQM', -            'md5': 'db471f27763a531f10416a0c58b5a1e0', -            'info_dict': { -                'id': 'OiJQM', -                'ext': 'mp4', -                'title': 'Is Alcohol Worse Than Ecstasy?', -                'description': 'md5:d25b96151515c91debc42bfbb3eb2683', -                'uploader': 'frihetsvinge', -            }, -        }, -        { -            'url': 'http://videobam.com/pqLvq', -            'md5': 'd9a565b5379a99126ef94e1d7f9a383e', -            'note': 'HD video', -            'info_dict': { -                'id': 'pqLvq', -                'ext': 'mp4', -                'title': '_', -            } -        }, -    ] - -    def _real_extract(self, url): -        mobj = re.match(self._VALID_URL, url) -        video_id = mobj.group('id') - -        page = self._download_webpage('http://videobam.com/%s' % video_id, video_id, 'Downloading page') - -        formats = [] - -        for preference, format_id in enumerate(['low', 'high']): -            mobj = re.search(r"%s: '(?P<url>[^']+)'" % format_id, page) -            if not mobj: -                continue -            formats.append({ -                'url': mobj.group('url'), -                'ext': 'mp4', -                'format_id': format_id, -                'preference': preference, -            }) - -        if not formats: -            player_config = json.loads(self._html_search_regex(r'var player_config = ({.+?});', page, 'player config')) -            formats = [{ -                'url': item['url'], -                'ext': 'mp4', -            } for item in player_config['playlist'] if 'autoPlay' in item] - -        self._sort_formats(formats) - -        title = self._og_search_title(page, default='_', fatal=False) -        description = self._og_search_description(page, default=None) -        thumbnail = self._og_search_thumbnail(page) -        uploader = self._html_search_regex(r'Upload by ([^<]+)</a>', page, 'uploader', fatal=False, default=None) -        view_count = int_or_none( -            self._html_search_regex(r'<strong>Views:</strong> (\d+) ', page, 'view count', fatal=False)) - -        return { -            'id': video_id, -            'title': title, -            'description': description, -            'thumbnail': thumbnail, -            'uploader': uploader, -            'view_count': view_count, -            'formats': formats, -            'age_limit': 18, -        } | 
