1 from __future__ 
import unicode_literals
 
   5 from .common 
import InfoExtractor
 
   6 from ..compat 
import compat_urlparse
 
  15 class NovaMovIE(InfoExtractor
): 
  19     _VALID_URL_TEMPLATE 
= r
'''(?x) 
  22                                     (?:www\.)?%(host)s/(?:file|video|mobile/\#/videos)/| 
  23                                     (?:(?:embed|www)\.)%(host)s/embed(?:\.php|/)?\?(?:.*?&)?\bv= 
  27     _VALID_URL 
= _VALID_URL_TEMPLATE 
% {'host': r
'novamov\.com'} 
  29     _HOST 
= 'www.novamov.com' 
  31     _FILE_DELETED_REGEX 
= r
'This file no longer exists on our servers!</h2>' 
  32     _FILEKEY_REGEX 
= r
'flashvars\.filekey=(?P<filekey>"?[^"]+"?);' 
  33     _TITLE_REGEX 
= r
'(?s)<div class="v_tab blockborder rounded5" id="v_tab1">\s*<h3>([^<]+)</h3>' 
  34     _DESCRIPTION_REGEX 
= r
'(?s)<div class="v_tab blockborder rounded5" id="v_tab1">\s*<h3>[^<]+</h3><p>([^<]+)</p>' 
  35     _URL_TEMPLATE 
= 'http://%s/video/%s' 
  39     def _check_existence(self
, webpage
, video_id
): 
  40         if re
.search(self
._FILE
_DELETED
_REGEX
, webpage
) is not None: 
  41             raise ExtractorError('Video %s does not exist' % video_id
, expected
=True) 
  43     def _real_extract(self
, url
): 
  44         video_id 
= self
._match
_id
(url
) 
  46         url 
= self
._URL
_TEMPLATE 
% (self
._HOST
, video_id
) 
  48         webpage 
= self
._download
_webpage
( 
  49             url
, video_id
, 'Downloading video page') 
  51         self
._check
_existence
(webpage
, video_id
) 
  53         def extract_filekey(default
=NO_DEFAULT
): 
  54             filekey 
= self
._search
_regex
( 
  55                 self
._FILEKEY
_REGEX
, webpage
, 'filekey', default
=default
) 
  56             if filekey 
is not default 
and (filekey
[0] != '"' or filekey
[-1] != '"'): 
  57                 return self
._search
_regex
( 
  58                     r
'var\s+%s\s*=\s*"([^"]+)"' % re
.escape(filekey
), webpage
, 'filekey', default
=default
) 
  62         filekey 
= extract_filekey(default
=None) 
  65             fields 
= self
._hidden
_inputs
(webpage
) 
  66             post_url 
= self
._search
_regex
( 
  67                 r
'<form[^>]+action=(["\'])(?P
<url
>.+?
)\
1', webpage, 
  68                 'post url
', default=url, group='url
') 
  69             if not post_url.startswith('http
'): 
  70                 post_url = compat_urlparse.urljoin(url, post_url) 
  71             request = sanitized_Request( 
  72                 post_url, urlencode_postdata(fields)) 
  73             request.add_header('Content
-Type
', 'application
/x
-www
-form
-urlencoded
') 
  74             request.add_header('Referer
', post_url) 
  75             webpage = self._download_webpage( 
  76                 request, video_id, 'Downloading 
continue to the video page
') 
  77             self._check_existence(webpage, video_id) 
  79         filekey = extract_filekey() 
  81         title = self._html_search_regex(self._TITLE_REGEX, webpage, 'title
') 
  82         description = self._html_search_regex(self._DESCRIPTION_REGEX, webpage, 'description
', default='', fatal=False) 
  84         api_response = self._download_webpage( 
  85             'http
://%s/api
/player
.api
.php?key
=%s&file=%s' % (self._HOST, filekey, video_id), video_id, 
  86             'Downloading video api response
') 
  88         response = compat_urlparse.parse_qs(api_response) 
  90         if 'error_msg
' in response: 
  91             raise ExtractorError('%s returned error
: %s' % (self.IE_NAME, response['error_msg
'][0]), expected=True) 
  93         video_url = response['url
'][0] 
  99             'description
': description 
 103 class WholeCloudIE(NovaMovIE): 
 104     IE_NAME = 'wholecloud
' 
 105     IE_DESC = 'WholeCloud
' 
 107     _VALID_URL = NovaMovIE._VALID_URL_TEMPLATE % {'host
': r'(?
:wholecloud\
.net|movshare\
.(?
:net|sx|ag
))'} 
 109     _HOST = 'www
.wholecloud
.net
' 
 111     _FILE_DELETED_REGEX = r'>This 
file no longer exists on our servers
.<' 
 112     _TITLE_REGEX = r'<strong
>Title
:</strong
> ([^
<]+)</p
>' 
 113     _DESCRIPTION_REGEX = r'<strong
>Description
:</strong
> ([^
<]+)</p
>' 
 116         'url
': 'http
://www
.wholecloud
.net
/video
/559e28be54d96
', 
 117         'md5
': 'abd31a2132947262c50429e1d16c1bfd
', 
 119             'id': '559e28be54d96
', 
 121             'title
': 'dissapeared image
', 
 122             'description
': 'optical illusion  dissapeared image  magic illusion
', 
 127 class NowVideoIE(NovaMovIE): 
 131     _VALID_URL = NovaMovIE._VALID_URL_TEMPLATE % {'host
': r'nowvideo\
.(?
:to|ch|ec|sx|eu|at|ag|co|li
)'} 
 133     _HOST = 'www
.nowvideo
.to
' 
 135     _FILE_DELETED_REGEX = r'>This 
file no longer exists on our servers
.<' 
 136     _TITLE_REGEX = r'<h4
>([^
<]+)</h4
>' 
 137     _DESCRIPTION_REGEX = r'</h4
>\s
*<p
>([^
<]+)</p
>' 
 140         'url
': 'http
://www
.nowvideo
.sx
/video
/f1d6fce9a968b
', 
 141         'md5
': '12c82cad4f2084881d8bc60ee29df092
', 
 143             'id': 'f1d6fce9a968b
', 
 145             'title
': 'youtubedl test video BaWjenozKc
', 
 146             'description
': 'Description
', 
 151 class VideoWeedIE(NovaMovIE): 
 152     IE_NAME = 'videoweed
' 
 153     IE_DESC = 'VideoWeed
' 
 155     _VALID_URL = NovaMovIE._VALID_URL_TEMPLATE % {'host
': r'videoweed\
.(?
:es|com
)'} 
 157     _HOST = 'www
.videoweed
.es
' 
 159     _FILE_DELETED_REGEX = r'>This 
file no longer exists on our servers
.<' 
 160     _TITLE_REGEX = r'<h1 
class="text_shadow">([^
<]+)</h1
>' 
 161     _URL_TEMPLATE = 'http
://%s/file/%s' 
 164         'url
': 'http
://www
.videoweed
.es
/file/b42178afbea14
', 
 165         'md5
': 'abd31a2132947262c50429e1d16c1bfd
', 
 167             'id': 'b42178afbea14
', 
 169             'title
': 'optical illusion  dissapeared image magic illusion
', 
 175 class CloudTimeIE(NovaMovIE): 
 176     IE_NAME = 'cloudtime
' 
 177     IE_DESC = 'CloudTime
' 
 179     _VALID_URL = NovaMovIE._VALID_URL_TEMPLATE % {'host
': r'cloudtime\
.to
'} 
 181     _HOST = 'www
.cloudtime
.to
' 
 183     _FILE_DELETED_REGEX = r'>This 
file no longer exists on our servers
.<' 
 184     _TITLE_REGEX = r'<div
[^
>]+class=["\']video_det["\'][^
>]*>\s
*<strong
>([^
<]+)</strong
>' 
 189 class AuroraVidIE(NovaMovIE): 
 190     IE_NAME = 'auroravid
' 
 191     IE_DESC = 'AuroraVid
' 
 193     _VALID_URL = NovaMovIE._VALID_URL_TEMPLATE % {'host
': r'auroravid\
.to
'} 
 195     _HOST = 'www
.auroravid
.to
' 
 197     _FILE_DELETED_REGEX = r'This 
file no longer exists on our servers
!<' 
 200         'url
': 'http
://www
.auroravid
.to
/video
/4rurhn9x446jj
', 
 201         'md5
': '7205f346a52bbeba427603ba10d4b935
', 
 203             'id': '4rurhn9x446jj
', 
 205             'title
': 'search engine optimization
', 
 206             'description
': 'search engine optimization 
is used to rank the web page 
in the google search engine
' 
 208         'skip
': '"Invalid token" errors 
abound (in web interface 
as well 
as youtube
-dl
, there 
is nothing we can do about it
.)' 
 210         'url
': 'http
://www
.auroravid
.to
/embed
/?v
=4rurhn9x446jj
', 
 211         'only_matching
': True,