diff options
author | Sergey M․ <dstftw@gmail.com> | 2020-12-26 20:30:19 +0700 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2020-12-26 20:30:19 +0700 |
commit | 98106accb6fde5e48e0fd9894b4ce29b5c864f6d (patch) | |
tree | decaf3c1c0f664bfabd15203ec72e18472646461 /youtube_dl/extractor/bongacams.py | |
parent | af1312bfc38b8dd3ba9381e9d7a58206870651a5 (diff) | |
download | youtube-dl-98106accb6fde5e48e0fd9894b4ce29b5c864f6d.tar.xz |
[bongacams] Add extractor (closes #27440)
Diffstat (limited to 'youtube_dl/extractor/bongacams.py')
-rw-r--r-- | youtube_dl/extractor/bongacams.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/youtube_dl/extractor/bongacams.py b/youtube_dl/extractor/bongacams.py new file mode 100644 index 000000000..180542fbc --- /dev/null +++ b/youtube_dl/extractor/bongacams.py @@ -0,0 +1,60 @@ +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..compat import compat_str +from ..utils import ( + int_or_none, + try_get, + urlencode_postdata, +) + + +class BongaCamsIE(InfoExtractor): + _VALID_URL = r'https?://(?P<host>(?:[^/]+\.)?bongacams\d*\.com)/(?P<id>[^/?&#]+)' + _TESTS = [{ + 'url': 'https://de.bongacams.com/azumi-8', + 'only_matching': True, + }, { + 'url': 'https://cn.bongacams.com/azumi-8', + 'only_matching': True, + }] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + host = mobj.group('host') + channel_id = mobj.group('id') + + amf = self._download_json( + 'https://%s/tools/amf.php' % host, channel_id, + data=urlencode_postdata(( + ('method', 'getRoomData'), + ('args[]', channel_id), + ('args[]', 'false'), + )), headers={'X-Requested-With': 'XMLHttpRequest'}) + + server_url = amf['localData']['videoServerUrl'] + + uploader_id = try_get( + amf, lambda x: x['performerData']['username'], compat_str) or channel_id + uploader = try_get( + amf, lambda x: x['performerData']['displayName'], compat_str) + like_count = int_or_none(try_get( + amf, lambda x: x['performerData']['loversCount'])) + + formats = self._extract_m3u8_formats( + '%s/hls/stream_%s/playlist.m3u8' % (server_url, uploader_id), + channel_id, 'mp4', m3u8_id='hls', live=True) + self._sort_formats(formats) + + return { + 'id': channel_id, + 'title': self._live_title(uploader or uploader_id), + 'uploader': uploader, + 'uploader_id': uploader_id, + 'like_count': like_count, + 'age_limit': 18, + 'is_live': True, + 'formats': formats, + } |