Merge remote-tracking branch 'upstream/master'
[youtube-dl] / youtube_dl / extractor / vidto.py
1 # coding: utf-8
2 from __future__ import unicode_literals
3
4 import time
5
6 from .common import InfoExtractor
7 from ..utils import (
8     encode_dict,
9     remove_end,
10     urlencode_postdata,
11 )
12 from ..compat import compat_urllib_request
13
14
15 class VidtoIE(InfoExtractor):
16     IE_NAME = 'vidto'
17     IE_DESC = 'VidTo.me'
18     _VALID_URL = r'https?://(?:www\.)?vidto\.me/(?P<id>[0-9a-zA-Z]+)\.html'
19     _TEST = {
20         'url': 'http://vidto.me/ku5glz52nqe1.html',
21         'info_dict': {
22             'id': 'ku5glz52nqe1',
23             'ext': 'mp4',
24             'title': 'test'
25         }
26     }
27
28     def _real_extract(self, url):
29         video_id = self._match_id(url)
30
31         page = self._download_webpage(
32             'http://vidto.me/%s.html' % video_id, video_id, 'Downloading video page')
33
34         title = remove_end(self._html_search_regex(
35             r'<Title>\s*([^<]+)\s*</Title>', page, 'title'), ' - Vidto')
36
37         hidden_fields = self._hidden_inputs(page)
38
39         self.to_screen('Waiting for countdown...')
40         time.sleep(7)
41
42         req = compat_urllib_request.Request(
43             url, urlencode_postdata(encode_dict(hidden_fields)))
44         req.add_header('Content-type', 'application/x-www-form-urlencoded')
45
46         post_result = self._download_webpage(
47             req, video_id,
48             note='Proceed to video...', errnote='unable to proceed')
49
50         file_link = self._search_regex(
51             r'file_link\s*=\s*\'(https?:\/\/[0-9a-zA-z.\/\-_]+)', post_result, 'file_link')
52
53         return {
54             'id': video_id,
55             'url': file_link,
56             'title': title,
57         }