]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/saitosan.py
1 from .common
import InfoExtractor
2 from ..utils
import ExtractorError
, try_get
5 class SaitosanIE(InfoExtractor
):
7 _VALID_URL
= r
'https?://(?:www\.)?saitosan\.net/bview.html\?id=(?P<id>[0-9]+)'
9 'url': 'http://www.saitosan.net/bview.html?id=10031846',
15 'thumbnail': 'http://111.171.196.85:8088/921f916f-7f55-4c97-b92e-5d9d0fef8f5f/thumb',
20 'skip_download': True,
22 'skip': 'Broadcasts are ephemeral',
25 'url': 'http://www.saitosan.net/bview.html?id=10031795',
31 'thumbnail': 'http://111.171.196.85:8088/1a3933e1-a01a-483b-8931-af15f37f8082/thumb',
36 'skip_download': True,
38 'skip': 'Broadcasts are ephemeral',
41 def _real_extract(self
, url
):
42 b_id
= self
._match
_id
(url
)
44 base
= 'http://hankachi.saitosan-api.net:8002/socket.io/?transport=polling&EIO=3'
45 sid
= self
._download
_socket
_json
(base
, b_id
, note
='Opening socket').get('sid')
48 self
._download
_webpage
(base
, b_id
, note
='Polling socket')
49 payload
= '420["room_start_join",{"room_id":"%s"}]' % b_id
50 payload
= '%s:%s' % (len(payload
), payload
)
52 self
._download
_webpage
(base
, b_id
, data
=payload
, note
='Polling socket with payload')
53 response
= self
._download
_socket
_json
(base
, b_id
, note
='Polling socket')
54 if not response
.get('ok'):
55 err
= response
.get('error') or {}
57 '%s said: %s - %s' % (self
.IE_NAME
, err
.get('code', '?'), err
.get('msg', 'Unknown')) if err
58 else 'The socket reported that the broadcast could not be joined. Maybe it\'s offline or the URL is incorrect',
59 expected
=True, video_id
=b_id
)
61 self
._download
_webpage
(base
, b_id
, data
='26:421["room_finish_join",{}]', note
='Polling socket')
62 b_data
= self
._download
_socket
_json
(base
, b_id
, note
='Getting broadcast metadata from socket')
63 m3u8_url
= b_data
.get('url')
65 self
._download
_webpage
(base
, b_id
, data
='1:1', note
='Closing socket', fatal
=False)
69 'title': b_data
.get('name'),
70 'formats': self
._extract
_m
3u8_formats
(m3u8_url
, b_id
, 'mp4', live
=True),
71 'thumbnail': m3u8_url
.replace('av.m3u8', 'thumb'),
72 'uploader': try_get(b_data
, lambda x
: x
['broadcast_user']['name']), # same as title