diff options
| author | Sergey M․ <dstftw@gmail.com> | 2019-11-27 02:28:06 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2019-11-27 02:28:06 +0700 | 
| commit | edc2a1f68b267abc6b4c94991da4ad83fd8374bb (patch) | |
| tree | 7e9d2fef4a4228cee443d487866bdbfd009f68ed | |
| parent | 1ced222120c00854865c5b16e89838235ed549ee (diff) | |
[vivo] Fix extraction (closes #22328, closes #22279)
| -rw-r--r-- | youtube_dl/extractor/shared.py | 27 | 
1 files changed, 19 insertions, 8 deletions
diff --git a/youtube_dl/extractor/shared.py b/youtube_dl/extractor/shared.py index ff575f592..02295d1a4 100644 --- a/youtube_dl/extractor/shared.py +++ b/youtube_dl/extractor/shared.py @@ -1,13 +1,18 @@  from __future__ import unicode_literals  from .common import InfoExtractor -from ..compat import compat_b64decode +from ..compat import ( +    compat_b64decode, +    compat_urllib_parse_unquote_plus, +)  from ..utils import (      determine_ext,      ExtractorError,      int_or_none, +    js_to_json,      KNOWN_EXTENSIONS,      parse_filesize, +    rot47,      url_or_none,      urlencode_postdata,  ) @@ -112,16 +117,22 @@ class VivoIE(SharedBaseIE):              webpage, 'filesize', fatal=False))      def _extract_video_url(self, webpage, video_id, url): -        def decode_url(encoded_url): +        def decode_url_old(encoded_url):              return compat_b64decode(encoded_url).decode('utf-8') -        stream_url = url_or_none(decode_url(self._search_regex( +        stream_url = self._search_regex(              r'data-stream\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage, -            'stream url', default=None, group='url'))) +            'stream url', default=None, group='url') +        if stream_url: +            stream_url = url_or_none(decode_url_old(stream_url))          if stream_url:              return stream_url -        return self._parse_json( + +        def decode_url(encoded_url): +            return rot47(compat_urllib_parse_unquote_plus(encoded_url)) + +        return decode_url(self._parse_json(              self._search_regex( -                r'InitializeStream\s*\(\s*(["\'])(?P<url>(?:(?!\1).)+)\1', -                webpage, 'stream', group='url'), -            video_id, transform_source=decode_url)[0] +                r'(?s)InitializeStream\s*\(\s*({.+?})\s*\)\s*;', webpage, +                'stream'), +            video_id, transform_source=js_to_json)['source'])  | 
