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