3 from .common
import InfoExtractor
4 from ..utils
import ExtractorError
7 class BokeCCBaseIE(InfoExtractor
):
8 def _extract_bokecc_formats(self
, webpage
, video_id
, format_id
=None):
9 player_params_str
= self
._html
_search
_regex
(
10 r
'<(?:script|embed)[^>]+src=(?P<q>["\'])(?
:https?
:)?
//p\
.bokecc\
.com
/(?
:player|flash
/player\
.swf
)\?(?P
<query
>.+?
)(?P
=q
)',
11 webpage, 'player params
', group='query
')
13 player_params = urllib.parse.parse_qs(player_params_str)
15 info_xml = self._download_xml(
16 'http
://p
.bokecc
.com
/servlet
/playinfo?uid
={}&vid
={}&m
=1'.format(
17 player_params['siteid
'][0], player_params['vid
'][0]), video_id)
20 'format_id
': format_id,
21 'url
': quality.find('./copy
').attrib['playurl
'],
22 'quality
': int(quality.attrib['value
']),
23 } for quality in info_xml.findall('./video
/quality
')]
26 class BokeCCIE(BokeCCBaseIE):
28 _VALID_URL = r'https?
://union\
.bokecc\
.com
/playvideo\
.bo
\?(?P
<query
>.*)'
31 'url
': 'http
://union
.bokecc
.com
/playvideo
.bo?vid
=E0ABAE9D4F509B189C33DC5901307461
&uid
=FE644790DE9D154A
',
33 'id': 'FE644790DE9D154A_E0ABAE9D4F509B189C33DC5901307461
',
35 'title
': 'BokeCC Video
',
39 def _real_extract(self, url):
40 qs = urllib.parse.parse_qs(self._match_valid_url(url).group('query
'))
41 if not qs.get('vid
') or not qs.get('uid
'):
42 raise ExtractorError('Invalid URL
', expected=True)
44 video_id = '{}_
{}'.format(qs['uid
'][0], qs['vid
'][0])
46 webpage = self._download_webpage(url, video_id)
50 'title
': 'BokeCC Video
', # no title provided in the webpage
51 'formats
': self._extract_bokecc_formats(webpage, video_id),