aboutsummaryrefslogtreecommitdiffstats
path: root/hypervideo_dl/extractor/youporn.py
diff options
context:
space:
mode:
Diffstat (limited to 'hypervideo_dl/extractor/youporn.py')
-rw-r--r--hypervideo_dl/extractor/youporn.py39
1 files changed, 26 insertions, 13 deletions
diff --git a/hypervideo_dl/extractor/youporn.py b/hypervideo_dl/extractor/youporn.py
index 5feb568..8f1b991 100644
--- a/hypervideo_dl/extractor/youporn.py
+++ b/hypervideo_dl/extractor/youporn.py
@@ -1,11 +1,10 @@
-from __future__ import unicode_literals
-
import re
from .common import InfoExtractor
from ..utils import (
extract_attributes,
int_or_none,
+ merge_dicts,
str_to_int,
unified_strdate,
url_or_none,
@@ -14,6 +13,7 @@ from ..utils import (
class YouPornIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?youporn\.com/(?:watch|embed)/(?P<id>\d+)(?:/(?P<display_id>[^/?#&]+))?'
+ _EMBED_REGEX = [r'<iframe[^>]+\bsrc=["\'](?P<url>(?:https?:)?//(?:www\.)?youporn\.com/embed/\d+)']
_TESTS = [{
'url': 'http://www.youporn.com/watch/505835/sex-ed-is-it-safe-to-masturbate-daily/',
'md5': '3744d24c50438cf5b6f6d59feb5055c2',
@@ -65,14 +65,26 @@ class YouPornIE(InfoExtractor):
}, {
'url': 'https://www.youporn.com/watch/13922959/femdom-principal/',
'only_matching': True,
+ }, {
+ 'url': 'https://www.youporn.com/watch/16290308/tinderspecial-trailer1/',
+ 'info_dict': {
+ 'id': '16290308',
+ 'age_limit': 18,
+ 'categories': [],
+ 'description': 'md5:00ea70f642f431c379763c17c2f396bc',
+ 'display_id': 'tinderspecial-trailer1',
+ 'duration': 298.0,
+ 'ext': 'mp4',
+ 'upload_date': '20201123',
+ 'uploader': 'Ersties',
+ 'tags': [],
+ 'thumbnail': 'https://fi1.ypncdn.com/202011/23/16290308/original/8/tinderspecial-trailer1-8(m=eaAaaEPbaaaa).jpg',
+ 'timestamp': 1606089600,
+ 'title': 'Tinder In Real Life',
+ 'view_count': int,
+ }
}]
- @staticmethod
- def _extract_urls(webpage):
- return re.findall(
- r'<iframe[^>]+\bsrc=["\']((?:https?:)?//(?:www\.)?youporn\.com/embed/\d+)',
- webpage)
-
def _real_extract(self, url):
mobj = self._match_valid_url(url)
video_id = mobj.group('id')
@@ -110,7 +122,6 @@ class YouPornIE(InfoExtractor):
})
f['height'] = height
formats.append(f)
- self._sort_formats(formats)
webpage = self._download_webpage(
'http://www.youporn.com/watch/%s' % video_id, display_id,
@@ -137,9 +148,10 @@ class YouPornIE(InfoExtractor):
r'(?s)<div[^>]+class=["\']submitByLink["\'][^>]*>(.+?)</div>',
webpage, 'uploader', fatal=False)
upload_date = unified_strdate(self._html_search_regex(
- [r'UPLOADED:\s*<span>([^<]+)',
+ (r'UPLOADED:\s*<span>([^<]+)',
r'Date\s+[Aa]dded:\s*<span>([^<]+)',
- r'(?s)<div[^>]+class=["\']videoInfo(?:Date|Time)["\'][^>]*>(.+?)</div>'],
+ r'''(?s)<div[^>]+class=["']videoInfo(?:Date|Time)\b[^>]*>(.+?)</div>''',
+ r'(?s)<label\b[^>]*>Uploaded[^<]*</label>\s*<span\b[^>]*>(.+?)</span>'),
webpage, 'upload date', fatal=False))
age_limit = self._rta_search(webpage)
@@ -166,7 +178,8 @@ class YouPornIE(InfoExtractor):
r'(?s)Tags:.*?</div>\s*<div[^>]+class=["\']tagBoxContent["\'][^>]*>(.+?)</div>',
'tags')
- return {
+ data = self._search_json_ld(webpage, video_id, expected_type='VideoObject', fatal=False)
+ return merge_dicts(data, {
'id': video_id,
'display_id': display_id,
'title': title,
@@ -181,4 +194,4 @@ class YouPornIE(InfoExtractor):
'tags': tags,
'age_limit': age_limit,
'formats': formats,
- }
+ })