2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
  13 class CinemassacreIE(InfoExtractor
): 
  14     _VALID_URL 
= r
'http://(?:www\.)?cinemassacre\.com/(?P<date_Y>[0-9]{4})/(?P<date_m>[0-9]{2})/(?P<date_d>[0-9]{2})/(?P<display_id>[^?#/]+)' 
  17             'url': 'http://cinemassacre.com/2012/11/10/avgn-the-movie-trailer/', 
  18             'md5': 'fde81fbafaee331785f58cd6c0d46190', 
  22                 'upload_date': '20121110', 
  23                 'title': '“Angry Video Game Nerd: The Movie” – Trailer', 
  24                 'description': 'md5:fb87405fcb42a331742a0dce2708560b', 
  28             'url': 'http://cinemassacre.com/2013/10/02/the-mummys-hand-1940', 
  29             'md5': 'd72f10cd39eac4215048f62ab477a511', 
  31                 'id': '521be8ef82b16', 
  33                 'upload_date': '20131002', 
  34                 'title': 'The Mummy’s Hand (1940)', 
  39     def _real_extract(self
, url
): 
  40         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  41         display_id 
= mobj
.group('display_id') 
  43         webpage 
= self
._download
_webpage
(url
, display_id
) 
  44         video_date 
= mobj
.group('date_Y') + mobj
.group('date_m') + mobj
.group('date_d') 
  45         mobj 
= re
.search(r
'src="(?P<embed_url>http://player\.screenwavemedia\.com/play/[a-zA-Z]+\.php\?id=(?:Cinemassacre-)?(?P<video_id>.+?))"', webpage
) 
  47             raise ExtractorError('Can\'t extract embed url and video id') 
  48         playerdata_url 
= mobj
.group('embed_url') 
  49         video_id 
= mobj
.group('video_id') 
  51         video_title 
= self
._html
_search
_regex
( 
  52             r
'<title>(?P<title>.+?)\|', webpage
, 'title') 
  53         video_description 
= self
._html
_search
_regex
( 
  54             r
'<div class="entry-content">(?P<description>.+?)</div>', 
  55             webpage
, 'description', flags
=re
.DOTALL
, fatal
=False) 
  57         playerdata 
= self
._download
_webpage
(playerdata_url
, video_id
, 'Downloading player webpage') 
  58         video_thumbnail 
= self
._search
_regex
( 
  59             r
'image: \'(?P
<thumbnail
>[^
\']+)\'', playerdata, 'thumbnail
', fatal=False) 
  60         sd_url = self._search_regex(r'file: \'([^
\']+)\', label
: \'SD
\'', playerdata, 'sd_file
') 
  61         videolist_url = self._search_regex(r'file: \'([^
\']+\
.smil
)\'}', playerdata, 'videolist_url
') 
  63         videolist = self._download_xml(videolist_url, video_id, 'Downloading videolist XML
') 
  66         baseurl = sd_url[:sd_url.rfind('/')+1] 
  67         for video in videolist.findall('.//video
'): 
  68             src = video.get('src
') 
  71             file_ = src.partition(':')[-1] 
  72             width = int_or_none(video.get('width
')) 
  73             height = int_or_none(video.get('height
')) 
  74             bitrate = int_or_none(video.get('system
-bitrate
')) 
  76                 'url
': baseurl + file_, 
  77                 'format_id
': src.rpartition('.')[0].rpartition('_
')[-1], 
  81                     'tbr
': bitrate // 1000 if bitrate else None, 
  87                     'abr
': bitrate // 1000 if bitrate else None, 
  90             formats.append(format) 
  91         self._sort_formats(formats) 
  97             'description
': video_description, 
  98             'upload_date
': video_date, 
  99             'thumbnail
': video_thumbnail,