1 from __future__ 
import unicode_literals
 
   5 from .common 
import InfoExtractor
 
   6 from ..aes 
import aes_decrypt_text
 
   7 from ..compat 
import compat_urllib_parse_unquote
 
  18 class KeezMoviesIE(InfoExtractor
): 
  19     _VALID_URL 
= r
'https?://(?:www\.)?keezmovies\.com/video/(?:(?P<display_id>[^/]+)-)?(?P<id>\d+)' 
  21         'url': 'https://www.keezmovies.com/video/arab-wife-want-it-so-bad-i-see-she-thirsty-and-has-tiny-money-18070681', 
  22         'md5': '2ac69cdb882055f71d82db4311732a1a', 
  25             'display_id': 'arab-wife-want-it-so-bad-i-see-she-thirsty-and-has-tiny-money', 
  27             'title': 'Arab wife want it so bad I see she thirsty and has tiny money.', 
  33         'url': 'http://www.keezmovies.com/video/18070681', 
  34         'only_matching': True, 
  37     def _extract_info(self
, url
, fatal
=True): 
  38         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  39         video_id 
= mobj
.group('id') 
  40         display_id 
= (mobj
.group('display_id') 
  41                       if 'display_id' in mobj
.groupdict() 
  42                       else None) or mobj
.group('id') 
  44         webpage 
= self
._download
_webpage
( 
  45             url
, display_id
, headers
={'Cookie': 'age_verified=1'}) 
  55         def extract_format(format_url
, height
=None): 
  56             format_url 
= url_or_none(format_url
) 
  57             if not format_url 
or not format_url
.startswith(('http', '//')): 
  59             if format_url 
in format_urls
: 
  61             format_urls
.add(format_url
) 
  62             tbr 
= int_or_none(self
._search
_regex
( 
  63                 r
'[/_](\d+)[kK][/_]', format_url
, 'tbr', default
=None)) 
  65                 height 
= int_or_none(self
._search
_regex
( 
  66                     r
'[/_](\d+)[pP][/_]', format_url
, 'height', default
=None)) 
  68                 format_url 
= aes_decrypt_text( 
  69                     video_url
, title
, 32).decode('utf-8') 
  72                 'format_id': '%dp' % height 
if height 
else None, 
  77         flashvars 
= self
._parse
_json
( 
  79                 r
'flashvars\s*=\s*({.+?});', webpage
, 
  80                 'flashvars', default
='{}'), 
  81             display_id
, fatal
=False) 
  84             title 
= flashvars
.get('video_title') 
  85             thumbnail 
= flashvars
.get('image_url') 
  86             duration 
= int_or_none(flashvars
.get('video_duration')) 
  87             encrypted 
= flashvars
.get('encrypted') is True 
  88             for key
, value 
in flashvars
.items(): 
  89                 mobj 
= re
.search(r
'quality_(\d+)[pP]', key
) 
  91                     extract_format(value
, int(mobj
.group(1))) 
  92             video_url 
= flashvars
.get('video_url') 
  93             if video_url 
and determine_ext(video_url
, None): 
  94                 extract_format(video_url
) 
  96         video_url 
= self
._html
_search
_regex
( 
  97             r
'flashvars\.video_url\s*=\s*(["\'])(?P
<url
>http
.+?
)\
1', 
  98             webpage, 'video url
', default=None, group='url
') 
 100             extract_format(compat_urllib_parse_unquote(video_url)) 
 103             if 'title
="This video is no longer available"' in webpage: 
 104                 raise ExtractorError( 
 105                     'Video 
%s is no longer available
' % video_id, expected=True) 
 108             self._sort_formats(formats) 
 109         except ExtractorError: 
 114             title = self._html_search_regex( 
 115                 r'<h1
[^
>]*>([^
<]+)', webpage, 'title
') 
 119             'display_id
': display_id, 
 120             'title
': strip_or_none(title), 
 121             'thumbnail
': thumbnail, 
 122             'duration
': duration, 
 127     def _real_extract(self, url): 
 128         webpage, info = self._extract_info(url, fatal=False) 
 129         if not info['formats
']: 
 130             return self.url_result(url, 'Generic
') 
 131         info['view_count
'] = str_to_int(self._search_regex( 
 132             r'<b
>([\d
,.]+)</b
> Views?
', webpage, 'view count
', fatal=False))