]>
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')),