1 from .common
import InfoExtractor
2 from ..compat
import compat_parse_qs
3 from ..utils
import ExtractorError
6 class BokeCCBaseIE(InfoExtractor
):
7 def _extract_bokecc_formats(self
, webpage
, video_id
, format_id
=None):
8 player_params_str
= self
._html
_search
_regex
(
9 r
'<(?:script|embed)[^>]+src=(?P<q>["\'])(?
:https?
:)?
//p\
.bokecc\
.com
/(?
:player|flash
/player\
.swf
)\?(?P
<query
>.+?
)(?P
=q
)',
10 webpage, 'player params
', group='query
')
12 player_params = compat_parse_qs(player_params_str)
14 info_xml = self._download_xml(
15 'http
://p
.bokecc
.com
/servlet
/playinfo?uid
=%s&vid
=%s&m
=1' % (
16 player_params['siteid
'][0], player_params['vid
'][0]), video_id)
19 'format_id
': format_id,
20 'url
': quality.find('./copy
').attrib['playurl
'],
21 'quality
': int(quality.attrib['value
']),
22 } for quality in info_xml.findall('./video
/quality
')]
27 class BokeCCIE(BokeCCBaseIE):
29 _VALID_URL = r'https?
://union\
.bokecc\
.com
/playvideo\
.bo
\?(?P
<query
>.*)'
32 'url
': 'http
://union
.bokecc
.com
/playvideo
.bo?vid
=E0ABAE9D4F509B189C33DC5901307461
&uid
=FE644790DE9D154A
',
34 'id': 'FE644790DE9D154A_E0ABAE9D4F509B189C33DC5901307461
',
36 'title
': 'BokeCC Video
',
40 def _real_extract(self, url):
41 qs = compat_parse_qs(self._match_valid_url(url).group('query
'))
42 if not qs.get('vid
') or not qs.get('uid
'):
43 raise ExtractorError('Invalid URL
', expected=True)
45 video_id = '%s_%s' % (qs['uid
'][0], qs['vid
'][0])
47 webpage = self._download_webpage(url, video_id)
51 'title
': 'BokeCC Video
', # no title provided in the webpage
52 'formats
': self._extract_bokecc_formats(webpage, video_id),