]>
Commit | Line | Data |
---|---|---|
1d57b252 | 1 | # coding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
4 | import re | |
5 | ||
6 | from .common import InfoExtractor | |
48d4681e PH |
7 | from ..utils import ( |
8 | parse_duration, | |
9 | str_to_int, | |
10 | ) | |
11 | ||
1d57b252 | 12 | |
13 | class EpornerIE(InfoExtractor): | |
a7862a1b | 14 | _VALID_URL = r'https?://(?:www\.)?eporner\.com/hd-porn/(?P<id>\d+)/(?P<display_id>[\w-]+)' |
1d57b252 | 15 | _TEST = { |
16 | 'url': 'http://www.eporner.com/hd-porn/95008/Infamous-Tiffany-Teen-Strip-Tease-Video/', | |
8c23945c | 17 | 'md5': '39d486f046212d8e1b911c52ab4691f8', |
1d57b252 | 18 | 'info_dict': { |
19 | 'id': '95008', | |
a7862a1b | 20 | 'display_id': 'Infamous-Tiffany-Teen-Strip-Tease-Video', |
8c23945c | 21 | 'ext': 'mp4', |
1d57b252 | 22 | 'title': 'Infamous Tiffany Teen Strip Tease Video', |
6a68bb57 | 23 | 'duration': 1838, |
48d4681e | 24 | 'view_count': int, |
563f6dea | 25 | 'age_limit': 18, |
1d57b252 | 26 | } |
27 | } | |
28 | ||
29 | def _real_extract(self, url): | |
30 | mobj = re.match(self._VALID_URL, url) | |
31 | video_id = mobj.group('id') | |
a7862a1b S |
32 | display_id = mobj.group('display_id') |
33 | ||
34 | webpage = self._download_webpage(url, display_id) | |
48d4681e PH |
35 | title = self._html_search_regex( |
36 | r'<title>(.*?) - EPORNER', webpage, 'title') | |
1d57b252 | 37 | |
48d4681e PH |
38 | redirect_code = self._html_search_regex( |
39 | r'<script type="text/javascript" src="/config5/%s/([a-f\d]+)/">' % video_id, | |
40 | webpage, 'redirect_code') | |
41 | redirect_url = 'http://www.eporner.com/config5/%s/%s' % (video_id, redirect_code) | |
563f6dea | 42 | player_code = self._download_webpage( |
a7862a1b S |
43 | redirect_url, display_id, note='Downloading player config') |
44 | ||
45 | sources = self._search_regex( | |
46 | r'(?s)sources\s*:\s*\[\s*({.+?})\s*\]', player_code, 'sources') | |
47 | ||
48 | formats = [] | |
49 | for video_url, format_id in re.findall(r'file\s*:\s*"([^"]+)",\s*label\s*:\s*"([^"]+)"', sources): | |
50 | fmt = { | |
51 | 'url': video_url, | |
52 | 'format_id': format_id, | |
53 | } | |
54 | m = re.search(r'^(\d+)', format_id) | |
55 | if m: | |
56 | fmt['height'] = int(m.group(1)) | |
57 | formats.append(fmt) | |
58 | self._sort_formats(formats) | |
1d57b252 | 59 | |
6a68bb57 | 60 | duration = parse_duration(self._html_search_meta('duration', webpage)) |
48d4681e PH |
61 | view_count = str_to_int(self._search_regex( |
62 | r'id="cinemaviews">\s*([0-9,]+)\s*<small>views', | |
63 | webpage, 'view count', fatal=False)) | |
1d57b252 | 64 | |
65 | return { | |
66 | 'id': video_id, | |
a7862a1b | 67 | 'display_id': display_id, |
1d57b252 | 68 | 'title': title, |
48d4681e PH |
69 | 'duration': duration, |
70 | 'view_count': view_count, | |
a7862a1b | 71 | 'formats': formats, |
563f6dea | 72 | 'age_limit': self._rta_search(webpage), |
1d57b252 | 73 | } |