]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/showroomlive.py
   2 from __future__ 
import unicode_literals
 
   4 from .common 
import InfoExtractor
 
   5 from ..compat 
import compat_str
 
  13 class ShowRoomLiveIE(InfoExtractor
): 
  14     _VALID_URL 
= r
'https?://(?:www\.)?showroom-live\.com/(?!onlive|timetable|event|campaign|news|ranking|room)(?P<id>[^/?#&]+)' 
  16         'url': 'https://www.showroom-live.com/48_Nana_Okada', 
  17         'only_matching': True, 
  20     def _real_extract(self
, url
): 
  21         broadcaster_id 
= self
._match
_id
(url
) 
  23         webpage 
= self
._download
_webpage
(url
, broadcaster_id
) 
  25         room_id 
= self
._search
_regex
( 
  26             (r
'SrGlobal\.roomId\s*=\s*(\d+)', 
  27              r
'(?:profile|room)\?room_id\=(\d+)'), webpage
, 'room_id') 
  29         room 
= self
._download
_json
( 
  30             urljoin(url
, '/api/room/profile?room_id=%s' % room_id
), 
  33         is_live 
= room
.get('is_onlive') 
  34         if is_live 
is not True: 
  35             raise ExtractorError('%s is offline' % broadcaster_id
, expected
=True) 
  37         uploader 
= room
.get('performer_name') or broadcaster_id
 
  38         title 
= room
.get('room_name') or room
.get('main_name') or uploader
 
  40         streaming_url_list 
= self
._download
_json
( 
  41             urljoin(url
, '/api/live/streaming_url?room_id=%s' % room_id
), 
  42             broadcaster_id
)['streaming_url_list'] 
  45         for stream 
in streaming_url_list
: 
  46             stream_url 
= stream
.get('url') 
  49             stream_type 
= stream
.get('type') 
  50             if stream_type 
== 'hls': 
  51                 m3u8_formats 
= self
._extract
_m
3u8_formats
( 
  52                     stream_url
, broadcaster_id
, ext
='mp4', m3u8_id
='hls', 
  54                 for f 
in m3u8_formats
: 
  55                     f
['quality'] = int_or_none(stream
.get('quality', 100)) 
  56                 formats
.extend(m3u8_formats
) 
  57             elif stream_type 
== 'rtmp': 
  58                 stream_name 
= stream
.get('stream_name') 
  63                     'play_path': stream_name
, 
  65                     'player_url': 'https://www.showroom-live.com/assets/swf/v3/ShowRoomLive.swf', 
  69                     'format_note': stream
.get('label'), 
  70                     'quality': int_or_none(stream
.get('quality', 100)), 
  72         self
._sort
_formats
(formats
) 
  75             'id': compat_str(room
.get('live_id') or broadcaster_id
), 
  76             'title': self
._live
_title
(title
), 
  77             'description': room
.get('description'), 
  78             'timestamp': int_or_none(room
.get('current_live_started_at')), 
  80             'uploader_id': broadcaster_id
, 
  81             'view_count': int_or_none(room
.get('view_num')),