diff options
| author | sprhawk <465558+sprhawk@users.noreply.github.com> | 2017-12-26 22:27:26 +0800 | 
|---|---|---|
| committer | sprhawk <465558+sprhawk@users.noreply.github.com> | 2017-12-26 22:27:26 +0800 | 
| commit | c33de004e13da11f1ae3cad7310b36500cfb9d28 (patch) | |
| tree | c742e448af6c126eca4b259c85f83177aec54847 /youtube_dl/extractor/mailru.py | |
| parent | 42a1012c7767306626c5358a18ad3e86417bd7b7 (diff) | |
| parent | db145ee54a57f5ccc89639de8c589eb111a91b19 (diff) | |
Merge branch 'master' of github.com:rg3/youtube-dl into weibo
Diffstat (limited to 'youtube_dl/extractor/mailru.py')
| -rw-r--r-- | youtube_dl/extractor/mailru.py | 59 | 
1 files changed, 40 insertions, 19 deletions
| diff --git a/youtube_dl/extractor/mailru.py b/youtube_dl/extractor/mailru.py index f7cc3c832..6b7c5e3e0 100644 --- a/youtube_dl/extractor/mailru.py +++ b/youtube_dl/extractor/mailru.py @@ -13,8 +13,15 @@ from ..utils import (  class MailRuIE(InfoExtractor):      IE_NAME = 'mailru'      IE_DESC = 'Видео@Mail.Ru' -    _VALID_URL = r'https?://(?:(?:www|m)\.)?my\.mail\.ru/(?:video/.*#video=/?(?P<idv1>(?:[^/]+/){3}\d+)|(?:(?P<idv2prefix>(?:[^/]+/){2})video/(?P<idv2suffix>[^/]+/\d+))\.html)' - +    _VALID_URL = r'''(?x) +                    https?:// +                        (?:(?:www|m)\.)?my\.mail\.ru/ +                        (?: +                            video/.*\#video=/?(?P<idv1>(?:[^/]+/){3}\d+)| +                            (?:(?P<idv2prefix>(?:[^/]+/){2})video/(?P<idv2suffix>[^/]+/\d+))\.html| +                            (?:video/embed|\+/video/meta)/(?P<metaid>\d+) +                        ) +                    '''      _TESTS = [          {              'url': 'http://my.mail.ru/video/top#video=/mail/sonypicturesrus/75/76', @@ -23,7 +30,7 @@ class MailRuIE(InfoExtractor):                  'id': '46301138_76',                  'ext': 'mp4',                  'title': 'Новый Человек-Паук. Высокое напряжение. Восстание Электро', -                'timestamp': 1393232740, +                'timestamp': 1393235077,                  'upload_date': '20140224',                  'uploader': 'sonypicturesrus',                  'uploader_id': 'sonypicturesrus@mail.ru', @@ -40,7 +47,7 @@ class MailRuIE(InfoExtractor):                  'title': 'Samsung Galaxy S5 Hammer Smash Fail Battery Explosion',                  'timestamp': 1397039888,                  'upload_date': '20140409', -                'uploader': 'hitech@corp.mail.ru', +                'uploader': 'hitech',                  'uploader_id': 'hitech@corp.mail.ru',                  'duration': 245,              }, @@ -65,28 +72,42 @@ class MailRuIE(InfoExtractor):          {              'url': 'http://m.my.mail.ru/mail/3sktvtr/video/_myvideo/138.html',              'only_matching': True, +        }, +        { +            'url': 'https://my.mail.ru/video/embed/7949340477499637815', +            'only_matching': True, +        }, +        { +            'url': 'http://my.mail.ru/+/video/meta/7949340477499637815', +            'only_matching': True,          }      ]      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url) -        video_id = mobj.group('idv1') - -        if not video_id: -            video_id = mobj.group('idv2prefix') + mobj.group('idv2suffix') - -        webpage = self._download_webpage(url, video_id) +        meta_id = mobj.group('metaid') + +        video_id = None +        if meta_id: +            meta_url = 'https://my.mail.ru/+/video/meta/%s' % meta_id +        else: +            video_id = mobj.group('idv1') +            if not video_id: +                video_id = mobj.group('idv2prefix') + mobj.group('idv2suffix') +            webpage = self._download_webpage(url, video_id) +            page_config = self._parse_json(self._search_regex( +                r'(?s)<script[^>]+class="sp-video__page-config"[^>]*>(.+?)</script>', +                webpage, 'page config', default='{}'), video_id, fatal=False) +            if page_config: +                meta_url = page_config.get('metaUrl') or page_config.get('video', {}).get('metaUrl') +            else: +                meta_url = None          video_data = None - -        page_config = self._parse_json(self._search_regex( -            r'(?s)<script[^>]+class="sp-video__page-config"[^>]*>(.+?)</script>', -            webpage, 'page config', default='{}'), video_id, fatal=False) -        if page_config: -            meta_url = page_config.get('metaUrl') or page_config.get('video', {}).get('metaUrl') -            if meta_url: -                video_data = self._download_json( -                    meta_url, video_id, 'Downloading video meta JSON', fatal=False) +        if meta_url: +            video_data = self._download_json( +                meta_url, video_id or meta_id, 'Downloading video meta JSON', +                fatal=not video_id)          # Fallback old approach          if not video_data: | 
