diff options
Diffstat (limited to 'youtube_dl/extractor/spankbang.py')
| -rw-r--r-- | youtube_dl/extractor/spankbang.py | 36 | 
1 files changed, 20 insertions, 16 deletions
| diff --git a/youtube_dl/extractor/spankbang.py b/youtube_dl/extractor/spankbang.py index e040ada29..d02ce6b57 100644 --- a/youtube_dl/extractor/spankbang.py +++ b/youtube_dl/extractor/spankbang.py @@ -4,6 +4,7 @@ import re  from .common import InfoExtractor  from ..utils import ( +    determine_ext,      ExtractorError,      merge_dicts,      orderedSet, @@ -75,11 +76,20 @@ class SpankBangIE(InfoExtractor):              if not f_url:                  return              f = parse_resolution(format_id) -            f.update({ -                'url': f_url, -                'format_id': format_id, -            }) -            formats.append(f) +            ext = determine_ext(f_url) +            if format_id.startswith('m3u8') or ext == 'm3u8': +                formats.extend(self._extract_m3u8_formats( +                    f_url, video_id, 'mp4', entry_protocol='m3u8_native', +                    m3u8_id='hls', fatal=False)) +            elif format_id.startswith('mpd') or ext == 'mpd': +                formats.extend(self._extract_mpd_formats( +                    f_url, video_id, mpd_id='dash', fatal=False)) +            elif ext == 'mp4' or f.get('width') or f.get('height'): +                f.update({ +                    'url': f_url, +                    'format_id': format_id, +                }) +                formats.append(f)          STREAM_URL_PREFIX = 'stream_url_' @@ -93,28 +103,22 @@ class SpankBangIE(InfoExtractor):                  r'data-streamkey\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1',                  webpage, 'stream key', group='value') -            sb_csrf_session = self._get_cookies( -                'https://spankbang.com')['sb_csrf_session'].value -              stream = self._download_json(                  'https://spankbang.com/api/videos/stream', video_id,                  'Downloading stream JSON', data=urlencode_postdata({                      'id': stream_key,                      'data': 0, -                    'sb_csrf_session': sb_csrf_session,                  }), headers={                      'Referer': url, -                    'X-CSRFToken': sb_csrf_session, +                    'X-Requested-With': 'XMLHttpRequest',                  })              for format_id, format_url in stream.items(): -                if format_id.startswith(STREAM_URL_PREFIX): -                    if format_url and isinstance(format_url, list): -                        format_url = format_url[0] -                    extract_format( -                        format_id[len(STREAM_URL_PREFIX):], format_url) +                if format_url and isinstance(format_url, list): +                    format_url = format_url[0] +                extract_format(format_id, format_url) -        self._sort_formats(formats) +        self._sort_formats(formats, field_preference=('preference', 'height', 'width', 'fps', 'tbr', 'format_id'))          info = self._search_json_ld(webpage, video_id, default={}) | 
