]>
Commit | Line | Data |
---|---|---|
8f8e8eba | 1 | # coding: utf-8 |
87724af7 PH |
2 | from __future__ import unicode_literals |
3 | ||
749fe60c | 4 | from .common import InfoExtractor |
3048e82a S |
5 | from ..utils import ( |
6 | parse_duration, | |
8f8e8eba | 7 | int_or_none, |
8 | try_get, | |
3048e82a | 9 | ) |
749fe60c | 10 | |
87724af7 | 11 | |
749fe60c | 12 | class NuvidIE(InfoExtractor): |
1cc79574 | 13 | _VALID_URL = r'https?://(?:www|m)\.nuvid\.com/video/(?P<id>[0-9]+)' |
8f8e8eba | 14 | _TESTS = [{ |
15 | 'url': 'https://www.nuvid.com/video/6513023/italian-babe', | |
16 | 'md5': '772d2f8288f3d3c5c45f7a41761c7844', | |
17 | 'info_dict': { | |
18 | 'id': '6513023', | |
19 | 'ext': 'mp4', | |
20 | 'title': 'italian babe', | |
21 | 'duration': 321.0, | |
22 | 'age_limit': 18, | |
23 | } | |
24 | }, { | |
25 | 'url': 'https://m.nuvid.com/video/6523263', | |
87724af7 | 26 | 'info_dict': { |
8f8e8eba | 27 | 'id': '6523263', |
87724af7 | 28 | 'ext': 'mp4', |
3048e82a | 29 | 'age_limit': 18, |
8f8e8eba | 30 | 'title': 'Slut brunette college student anal dorm', |
749fe60c | 31 | } |
8f8e8eba | 32 | }] |
749fe60c | 33 | |
34 | def _real_extract(self, url): | |
1cc79574 | 35 | video_id = self._match_id(url) |
749fe60c | 36 | |
8f8e8eba | 37 | qualities = { |
38 | 'lq': '360p', | |
39 | 'hq': '720p', | |
40 | } | |
41 | ||
42 | json_url = f'https://www.nuvid.com/player_config_json/?vid={video_id}&aid=0&domain_id=0&embed=0&check_speed=0' | |
43 | video_data = self._download_json( | |
44 | json_url, video_id, headers={ | |
45 | 'Accept': 'application/json, text/javascript, */*; q = 0.01', | |
46 | 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', | |
47 | }) | |
87724af7 | 48 | |
0cbcbdd8 | 49 | formats = [{ |
8f8e8eba | 50 | 'url': source, |
51 | 'format_id': qualities.get(quality), | |
52 | 'height': int_or_none(qualities.get(quality)[:-1]), | |
53 | } for quality, source in video_data.get('files').items() if source] | |
87724af7 | 54 | |
8f8e8eba | 55 | self._check_formats(formats, video_id) |
56 | self._sort_formats(formats) | |
57 | ||
58 | title = video_data.get('title') | |
59 | thumbnail_base_url = try_get(video_data, lambda x: x['thumbs']['url']) | |
60 | thumbnail_extension = try_get(video_data, lambda x: x['thumbs']['extension']) | |
61 | thumbnail_id = self._search_regex( | |
62 | r'/media/videos/tmb/6523263/preview/(/d+)' + thumbnail_extension, video_data.get('poster', ''), 'thumbnail id', default=19) | |
63 | thumbnail = f'{thumbnail_base_url}player/{thumbnail_id}{thumbnail_extension}' | |
64 | duration = parse_duration(video_data.get('duration') or video_data.get('duration_format')) | |
87724af7 PH |
65 | |
66 | return { | |
67 | 'id': video_id, | |
8f8e8eba | 68 | 'formats': formats, |
87724af7 | 69 | 'title': title, |
394df6d7 | 70 | 'thumbnail': thumbnail, |
3048e82a | 71 | 'duration': duration, |
87724af7 | 72 | 'age_limit': 18, |
5f6a1245 | 73 | } |