youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

bongacams.py (1903B)


      1 from __future__ import unicode_literals
      2 
      3 import re
      4 
      5 from .common import InfoExtractor
      6 from ..compat import compat_str
      7 from ..utils import (
      8     int_or_none,
      9     try_get,
     10     urlencode_postdata,
     11 )
     12 
     13 
     14 class BongaCamsIE(InfoExtractor):
     15     _VALID_URL = r'https?://(?P<host>(?:[^/]+\.)?bongacams\d*\.com)/(?P<id>[^/?&#]+)'
     16     _TESTS = [{
     17         'url': 'https://de.bongacams.com/azumi-8',
     18         'only_matching': True,
     19     }, {
     20         'url': 'https://cn.bongacams.com/azumi-8',
     21         'only_matching': True,
     22     }]
     23 
     24     def _real_extract(self, url):
     25         mobj = re.match(self._VALID_URL, url)
     26         host = mobj.group('host')
     27         channel_id = mobj.group('id')
     28 
     29         amf = self._download_json(
     30             'https://%s/tools/amf.php' % host, channel_id,
     31             data=urlencode_postdata((
     32                 ('method', 'getRoomData'),
     33                 ('args[]', channel_id),
     34                 ('args[]', 'false'),
     35             )), headers={'X-Requested-With': 'XMLHttpRequest'})
     36 
     37         server_url = amf['localData']['videoServerUrl']
     38 
     39         uploader_id = try_get(
     40             amf, lambda x: x['performerData']['username'], compat_str) or channel_id
     41         uploader = try_get(
     42             amf, lambda x: x['performerData']['displayName'], compat_str)
     43         like_count = int_or_none(try_get(
     44             amf, lambda x: x['performerData']['loversCount']))
     45 
     46         formats = self._extract_m3u8_formats(
     47             '%s/hls/stream_%s/playlist.m3u8' % (server_url, uploader_id),
     48             channel_id, 'mp4', m3u8_id='hls', live=True)
     49         self._sort_formats(formats)
     50 
     51         return {
     52             'id': channel_id,
     53             'title': self._live_title(uploader or uploader_id),
     54             'uploader': uploader,
     55             'uploader_id': uploader_id,
     56             'like_count': like_count,
     57             'age_limit': 18,
     58             'is_live': True,
     59             'formats': formats,
     60         }