2 from __future__ 
import unicode_literals
 
   7 from .common 
import InfoExtractor
 
   8 from ..compat 
import compat_urllib_parse_unquote_plus
 
  18 class KUSIIE(InfoExtractor
): 
  19     _VALID_URL 
= r
'https?://(?:www\.)?kusi\.com/(?P<path>story/.+|video\?clipId=(?P<clipId>\d+))' 
  21         'url': 'http://www.kusi.com/story/31183873/turko-files-case-closed-put-on-hold', 
  22         'md5': 'f926e7684294cf8cb7bdf8858e1b3988', 
  26             'title': 'Turko Files: Case Closed! & Put On Hold!', 
  28             'upload_date': '20160210', 
  29             'timestamp': 1455087571, 
  30             'thumbnail': 're:^https?://.*\.jpg$' 
  33         'url': 'http://kusi.com/video?clipId=12203019', 
  37             'title': 'Turko Files: Case Closed! & Put On Hold!', 
  39             'upload_date': '20160210', 
  40             'timestamp': 1455087571, 
  41             'thumbnail': 're:^https?://.*\.jpg$' 
  44             'skip_download': True,  # Same as previous one 
  48     def _real_extract(self
, url
): 
  49         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  50         clip_id 
= mobj
.group('clipId') 
  51         video_id 
= clip_id 
or mobj
.group('path') 
  53         webpage 
= self
._download
_webpage
(url
, video_id
) 
  56             video_id 
= clip_id 
= self
._html
_search
_regex
( 
  57                 r
'"clipId"\s*,\s*"(\d+)"', webpage
, 'clip id') 
  59         affiliate_id 
= self
._search
_regex
( 
  60             r
'affiliateId\s*:\s*\'([^
\']+)\'', webpage, 'affiliate 
id') 
  62         # See __Packages/worldnow/model/GalleryModel.as of WNGallery.swf 
  63         xml_url = update_url_query('http
://www
.kusi
.com
/build
.asp
', { 
  64             'buildtype
': 'buildfeaturexmlrequest
', 
  65             'featureType
': 'Clip
', 
  67             'affiliateno
': affiliate_id, 
  69             'rnd
': int(round(random.random() * 1000000)), 
  72         doc = self._download_xml(xml_url, video_id) 
  74         video_title = xpath_text(doc, 'HEADLINE
', fatal=True) 
  75         duration = float_or_none(xpath_text(doc, 'DURATION
'), scale=1000) 
  76         description = xpath_text(doc, 'ABSTRACT
') 
  77         thumbnail = xpath_text(doc, './THUMBNAILIMAGE
/FILENAME
') 
  78         createtion_time = timeconvert(xpath_text(doc, 'rfc822creationdate
')) 
  80         quality_options = doc.find('{http
://search
.yahoo
.com
/mrss
/}group
').findall('{http
://search
.yahoo
.com
/mrss
/}content
') 
  82         for quality in quality_options: 
  84                 'url
': compat_urllib_parse_unquote_plus(quality.attrib['url
']), 
  85                 'height
': int_or_none(quality.attrib.get('height
')), 
  86                 'width
': int_or_none(quality.attrib.get('width
')), 
  87                 'vbr
': float_or_none(quality.attrib.get('bitratebits
'), scale=1000), 
  89         self._sort_formats(formats) 
  94             'description
': description, 
  97             'thumbnail
': thumbnail, 
  98             'timestamp
': createtion_time,