2 from __future__ import unicode_literals
6 from .common import InfoExtractor
7 from ..compat import compat_urllib_parse_unquote_plus
8 from ..utils import int_or_none
11 class KUSIIE(InfoExtractor):
12 _VALID_URL = r'http://(?:www\.)?kusi\.com/(?P<path>story/.+|video\?clipId=(?P<clipId>\d+))'
14 'url': 'http://www.kusi.com/story/31183873/turko-files-case-closed-put-on-hold',
15 'md5': 'f926e7684294cf8cb7bdf8858e1b3988',
19 'title': 'Turko Files: Case Closed! & Put On Hold!',
23 'url': 'http://kusi.com/video?clipId=12203019',
27 'title': 'Turko Files: Case Closed! & Put On Hold!',
31 'skip_download': True, # Same as previous one
35 def _real_extract(self, url):
36 mobj = re.match(self._VALID_URL, url)
38 if mobj.group('clipId') is not None:
39 video_id = mobj.group('clipId')
41 webpage = self._download_webpage(url, mobj.group('path'))
42 video_id = self._html_search_regex(r'"clipId", "(\d+)"', webpage,
45 xml_url = 'http://www.kusi.com/build.asp?buildtype=buildfeaturexml'\
46 'request&featureType=Clip&featureid={0}&affiliateno=956&'\
47 'clientgroupid=1&rnd=562461'.format(video_id)
48 doc = self._download_xml(xml_url, video_id,
49 note='Downloading video info',
50 errnote='Failed to download video info')
52 video_title = doc.find('HEADLINE').text
53 duration = int_or_none(doc.find('DURATION'), get_attr='text')
54 description = doc.find('ABSTRACT')
56 quality_options = doc.find('{http://search.yahoo.com/mrss/}group').findall('{http://search.yahoo.com/mrss/}content')
58 for quality in quality_options:
59 if 'height' in quality.attrib:
61 'url': compat_urllib_parse_unquote_plus(quality.attrib['url']),
62 'height': quality.attrib['height'],
64 self._sort_formats(formats)
69 'description': description,