[Primesharetv] Handle file not existing properly.
[youtube-dl] / youtube_dl / extractor / primesharetv.py
1 # encoding: utf-8
2 from __future__ import unicode_literals
3
4 import re
5
6 from .common import InfoExtractor
7 from ..utils import (
8     ExtractorError,
9     int_or_none,
10     parse_filesize,
11     unified_strdate,
12     urlencode_postdata,
13 )
14 from ..compat import (
15     compat_urllib_request,
16 )
17
18 class PrimesharetvIE(InfoExtractor):
19     _VALID_URL = r'https?://(?:www\.)?primeshare\.tv/download/(?P<id>.*)(?:.*)'
20
21     _TESTS = [
22         {
23             'url': 'http://primeshare.tv/download/238790B611',
24             'md5': 'bb41f9f6c0dd434c729f04ce5b677192',
25             'info_dict': {
26                 'id': '238790B611',
27                 'ext': 'mp4',
28                 "title": "Public Domain - 1960s Commercial - Crest Toothpaste-YKsuFona [...]",
29                 "duration": 10,
30             },
31         }
32     ]
33
34     def _real_extract(self, url):
35         video_id = self._match_id(url)
36         webpage = self._download_webpage(url, video_id)
37         if re.search(r'<h1>File not exist</h1>', webpage) is not None:
38             raise ExtractorError('The file does not exist', expected=True)
39         hashtoken = self._search_regex(r' name="hash" value="(.*?)" ', webpage, 'hash token')
40        
41         self._sleep(9, video_id)
42         
43         data = urlencode_postdata({
44             'hash': hashtoken,
45         })
46         headers = {
47             'Referer': url,
48             'Content-Type': 'application/x-www-form-urlencoded',
49         }
50         video_page_request = compat_urllib_request.Request(url, data, headers=headers)
51         video_page = self._download_webpage(video_page_request, None, False, '')
52         video_url = self._html_search_regex(
53             r'url: \'(http://[a-z0-9]+\.primeshare\.tv:443/file/get/[^\']+)\',', video_page, 'video url')
54
55         title = self._html_search_regex(
56             r'<h1>Watch&nbsp;[^\(]+\(([^/)]+)\)&nbsp;', video_page, 'title')
57
58         return {
59             'id': video_id,
60             'url': video_url,
61             'title': title,
62             'ext': 'mp4',
63         }
64     
65     def _debug_print(self, txt):
66         if self._downloader.params.get('verbose'):
67             self.to_screen('[debug] %s' % txt)
68