summaryrefslogtreecommitdiff
path: root/youtube_dl/extractor/bokecc.py
blob: 6017e834495efa07ee3fd3adeff28cafc6939452 (plain)
    1 # coding: utf-8
    2 from __future__ import unicode_literals
    3 
    4 import re
    5 
    6 from .common import InfoExtractor
    7 from ..compat import compat_parse_qs
    8 from ..utils import ExtractorError
    9 
   10 
   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')
   16 
   17         player_params = compat_parse_qs(player_params_str)
   18 
   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)
   22 
   23         formats = [{
   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')]
   28 
   29         self._sort_formats(formats)
   30 
   31         return formats
   32 
   33 
   34 class BokeCCIE(BokeCCBaseIE):
   35     _IE_DESC = 'CC视频'
   36     _VALID_URL = r'https?://union\.bokecc\.com/playvideo\.bo\?(?P<query>.*)'
   37 
   38     _TESTS = [{
   39         'url': 'http://union.bokecc.com/playvideo.bo?vid=E0ABAE9D4F509B189C33DC5901307461&uid=FE644790DE9D154A',
   40         'info_dict': {
   41             'id': 'FE644790DE9D154A_E0ABAE9D4F509B189C33DC5901307461',
   42             'ext': 'flv',
   43             'title': 'BokeCC Video',
   44         },
   45     }]
   46 
   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)
   51 
   52         video_id = '%s_%s' % (qs['uid'][0], qs['vid'][0])
   53 
   54         webpage = self._download_webpage(url, video_id)
   55 
   56         return {
   57             'id': video_id,
   58             'title': 'BokeCC Video',  # no title provided in the webpage
   59             'formats': self._extract_bokecc_formats(webpage, video_id),
   60         }

Generated by cgit