4 from .common
import InfoExtractor
19 def decode_base64(text
):
20 return base64
.b64decode(text
.translate(text
.maketrans({
40 def get_formats(host
, video_file
):
42 'url': urljoin(f
'https://{host}', decode_base64(video
['video_url'])),
43 'format_id': try_call(lambda: variadic(video
['format'])[0].lstrip('_')),
45 } for index
, video
in enumerate(video_file
) if video
.get('video_url')]
48 class TxxxIE(InfoExtractor
):
56 'privatehomeclips.com',
57 'tubepornclassic.com',
68 _VALID_URL
= rf
'''(?x)
69 https?://(?:www\.)?(?P<host>{"|".join(map(re.escape, _DOMAINS))})/
70 (?:videos?[/-]|embed/)(?P<id>\d+)(?:/(?P<display_id>[^/?#]+))?
72 _EMBED_REGEX
= [rf
'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?(?:{"|".join(map(re.escape, _DOMAINS))})/embed/[^"\']*)\1']
74 'url': 'https://txxx.com/videos/16574965/digital-desire-malena-morgan/',
75 'md5': 'c54e4ace54320aaf8e2a72df87859391',
78 'display_id': 'digital-desire-malena-morgan',
80 'title': 'Digital Desire - Malena Morgan',
81 'uploader': 'Lois Argentum',
87 'thumbnail': 'https://tn.txxx.tube/contents/videos_sources/16574000/16574965/screenshots/1.jpg',
90 'url': 'https://txxx.tube/videos/16574965/digital-desire-malena-morgan/',
91 'md5': 'c54e4ace54320aaf8e2a72df87859391',
94 'display_id': 'digital-desire-malena-morgan',
96 'title': 'Digital Desire - Malena Morgan',
97 'uploader': 'Lois Argentum',
101 'dislike_count': int,
103 'thumbnail': 'https://tn.txxx.tube/contents/videos_sources/16574000/16574965/screenshots/1.jpg',
106 'url': 'https://vxxx.com/video-68925/',
107 'md5': '1fcff3748b0c5b41fe41d0afa22409e1',
110 'display_id': '68925',
112 'title': 'Malena Morgan',
113 'uploader': 'Huge Hughes',
117 'dislike_count': int,
119 'thumbnail': 'https://tn.vxxx.com/contents/videos_sources/68000/68925/screenshots/1.jpg',
122 'url': 'https://hclips.com/videos/6291073/malena-morgan-masturbates-her-sweet/',
123 'md5': 'a5dd4f83363972ee043313cff85e7e26',
126 'display_id': 'malena-morgan-masturbates-her-sweet',
128 'title': 'Malena Morgan masturbates her sweet',
129 'uploader': 'John Salt',
133 'dislike_count': int,
135 'thumbnail': 'https://hctn.nv7s.com/contents/videos_sources/6291000/6291073/screenshots/1.jpg',
138 'url': 'https://hdzog.com/videos/67063/gorgeous-malena-morgan-will-seduce-you-at-the-first-glance/',
139 'md5': 'f8bdedafd45d1ec2875c43fe33a846d3',
142 'display_id': 'gorgeous-malena-morgan-will-seduce-you-at-the-first-glance',
144 'title': 'Gorgeous Malena Morgan will seduce you at the first glance',
145 'uploader': 'momlesson',
149 'dislike_count': int,
151 'thumbnail': 'https://tn.hdzog.com/contents/videos_sources/67000/67063/screenshots/1.jpg',
154 'url': 'https://hdzog.tube/videos/67063/gorgeous-malena-morgan-will-seduce-you-at-the-first-glance/',
155 'md5': 'f8bdedafd45d1ec2875c43fe33a846d3',
158 'display_id': 'gorgeous-malena-morgan-will-seduce-you-at-the-first-glance',
160 'title': 'Gorgeous Malena Morgan will seduce you at the first glance',
161 'uploader': 'momlesson',
165 'dislike_count': int,
167 'thumbnail': 'https://tn.hdzog.com/contents/videos_sources/67000/67063/screenshots/1.jpg',
170 'url': 'https://hotmovs.com/videos/8789287/unbelievable-malena-morgan-performing-in-incredible-masturantion/',
171 'md5': '71d32c51584876472db87e561171a386',
174 'display_id': 'unbelievable-malena-morgan-performing-in-incredible-masturantion',
176 'title': 'Unbelievable Malena Morgan performing in incredible masturantion',
177 'uploader': 'Davit Sanchez',
181 'dislike_count': int,
183 'thumbnail': 'https://tn.hotmovs.com/contents/videos_sources/8789000/8789287/screenshots/10.jpg',
186 'url': 'https://hotmovs.tube/videos/8789287/unbelievable-malena-morgan-performing-in-incredible-masturantion/',
187 'md5': '71d32c51584876472db87e561171a386',
190 'display_id': 'unbelievable-malena-morgan-performing-in-incredible-masturantion',
192 'title': 'Unbelievable Malena Morgan performing in incredible masturantion',
193 'uploader': 'Davit Sanchez',
197 'dislike_count': int,
199 'thumbnail': 'https://tn.hotmovs.com/contents/videos_sources/8789000/8789287/screenshots/10.jpg',
202 'url': 'https://inporn.com/video/517897/malena-morgan-solo/',
203 'md5': '344db467481edf78f193cdf5820a7cfb',
206 'display_id': 'malena-morgan-solo',
208 'title': 'Malena Morgan - Solo',
209 'uploader': 'Ashley Oxy',
213 'dislike_count': int,
215 'thumbnail': 'https://iptn.m3pd.com/media/tn/sources/517897_1.jpg',
218 'url': 'https://privatehomeclips.com/videos/3630599/malena-morgan-cam-show/',
219 'md5': 'ea657273e352493c5fb6357fbfa4f126',
222 'display_id': 'malena-morgan-cam-show',
224 'title': 'malena morgan cam show',
225 'uploader': 'Member9915',
229 'dislike_count': int,
231 'thumbnail': 'https://hctn.nv7s.com/contents/videos_sources/3630000/3630599/screenshots/15.jpg',
234 'url': 'https://tubepornclassic.com/videos/1015455/mimi-rogers-full-body-massage-nude-compilation/',
235 'md5': '2e9a6cf610c9862e86e0ce24f08f4427',
238 'display_id': 'mimi-rogers-full-body-massage-nude-compilation',
240 'title': 'Mimi Rogers - Full Body Massage (Nude) compilation',
241 'uploader': '88bhuto',
245 'dislike_count': int,
247 'thumbnail': 'https://tn.tubepornclassic.com/contents/videos_sources/1015000/1015455/screenshots/6.jpg',
250 'url': 'https://upornia.com/videos/1498858/twistys-malena-morgan-starring-at-dr-morgan-baller/',
251 'md5': '7ff7033340bc88a173198b7c22600e4f',
254 'display_id': 'twistys-malena-morgan-starring-at-dr-morgan-baller',
256 'title': 'Twistys - Malena Morgan starring at Dr. Morgan-Baller',
257 'uploader': 'mindgeek',
261 'dislike_count': int,
263 'thumbnail': 'https://tn.upornia.com/contents/videos_sources/1498000/1498858/screenshots/1.jpg',
266 'url': 'https://upornia.tube/videos/1498858/twistys-malena-morgan-starring-at-dr-morgan-baller/',
267 'md5': '7ff7033340bc88a173198b7c22600e4f',
270 'display_id': 'twistys-malena-morgan-starring-at-dr-morgan-baller',
272 'title': 'Twistys - Malena Morgan starring at Dr. Morgan-Baller',
273 'uploader': 'mindgeek',
277 'dislike_count': int,
279 'thumbnail': 'https://tn.upornia.com/contents/videos_sources/1498000/1498858/screenshots/1.jpg',
282 'url': 'https://vjav.com/videos/11761/yui-hatano-in-if-yui-was-my-girlfriend2/',
283 'md5': '6de5bc1f13bdfc3491a77f23edb1676f',
286 'display_id': 'yui-hatano-in-if-yui-was-my-girlfriend2',
288 'title': 'Yui Hatano in If Yui Was My Girlfriend',
289 'uploader': 'Matheus69',
293 'dislike_count': int,
295 'thumbnail': 'https://tn.vjav.com/contents/videos_sources/11000/11761/screenshots/23.jpg',
298 'url': 'https://vjav.tube/videos/11761/yui-hatano-in-if-yui-was-my-girlfriend2/',
299 'md5': '6de5bc1f13bdfc3491a77f23edb1676f',
302 'display_id': 'yui-hatano-in-if-yui-was-my-girlfriend2',
304 'title': 'Yui Hatano in If Yui Was My Girlfriend',
305 'uploader': 'Matheus69',
309 'dislike_count': int,
311 'thumbnail': 'https://tn.vjav.com/contents/videos_sources/11000/11761/screenshots/23.jpg',
314 'url': 'https://voyeurhit.com/videos/332875/charlotte-stokely-elle-alexandra-malena-morgan-lingerie/',
315 'md5': '12b4666e9c3e60dafe9182e5d12aae33',
318 'display_id': 'charlotte-stokely-elle-alexandra-malena-morgan-lingerie',
320 'title': 'Charlotte Stokely, Elle Alexandra, Malena Morgan-Lingerie',
321 'uploader': 'Kyle Roberts',
325 'dislike_count': int,
327 'thumbnail': 'https://tn.voyeurhit.com/contents/videos_sources/332000/332875/screenshots/1.jpg',
330 'url': 'https://voyeurhit.tube/videos/332875/charlotte-stokely-elle-alexandra-malena-morgan-lingerie/',
331 'md5': '12b4666e9c3e60dafe9182e5d12aae33',
334 'display_id': 'charlotte-stokely-elle-alexandra-malena-morgan-lingerie',
336 'title': 'Charlotte Stokely, Elle Alexandra, Malena Morgan-Lingerie',
337 'uploader': 'Kyle Roberts',
341 'dislike_count': int,
343 'thumbnail': 'https://tn.voyeurhit.com/contents/videos_sources/332000/332875/screenshots/1.jpg',
347 'url': 'https://pornzog.com/video/9125519/michelle-malone-dreamgirls-wild-wet-3/',
350 'display_id': '5119660',
352 'title': 'Michelle Malone - Dreamgirls - Wild Wet 3',
353 'uploader': 'FallenAngel12',
357 'dislike_count': int,
359 'thumbnail': 'https://hctn.nv7s.com/contents/videos_sources/5119000/5119660/screenshots/1.jpg',
363 def _call_api(self
, url
, video_id
, fatal
=False, **kwargs
):
364 content
= self
._download
_json
(url
, video_id
, fatal
=fatal
, **kwargs
)
365 if traverse_obj(content
, 'error'):
366 raise self
._error
_or
_warning
(ExtractorError(
367 f
'Txxx said: {content["error"]}', expected
=True), fatal
=fatal
)
370 def _real_extract(self
, url
):
371 video_id
, host
, display_id
= self
._match
_valid
_url
(url
).group('id', 'host', 'display_id')
372 headers
= {'Referer': url
, 'X-Requested-With': 'XMLHttpRequest'}
374 video_file
= self
._call
_api
(
375 f
'https://{host}/api/videofile.php?video_id={video_id}&lifetime=8640000',
376 video_id
, fatal
=True, note
='Downloading video file info', headers
=headers
)
378 slug
= f
'{int(1E6 * (int(video_id) // 1E6))}/{1000 * (int(video_id) // 1000)}'
379 video_info
= self
._call
_api
(
380 f
'https://{host}/api/json/video/86400/{slug}/{video_id}.json',
381 video_id
, note
='Downloading video info', headers
=headers
)
385 'display_id': display_id
,
386 'title': traverse_obj(video_info
, ('video', 'title')),
387 'uploader': traverse_obj(video_info
, ('video', 'user', 'username')),
388 'duration': parse_duration(traverse_obj(video_info
, ('video', 'duration'))),
389 'view_count': int_or_none(traverse_obj(video_info
, ('video', 'statistics', 'viewed'))),
390 'like_count': int_or_none(traverse_obj(video_info
, ('video', 'statistics', 'likes'))),
391 'dislike_count': int_or_none(traverse_obj(video_info
, ('video', 'statistics', 'dislikes'))),
393 'thumbnail': traverse_obj(video_info
, ('video', 'thumbsrc', {url_or_none}
)),
394 'formats': get_formats(host
, video_file
),
398 class PornTopIE(InfoExtractor
):
399 _VALID_URL
= r
'https?://(?P<host>(?:www\.)?porntop\.com)/video/(?P<id>\d+)(?:/(?P<display_id>[^/?]+))?'
401 'url': 'https://porntop.com/video/101569/triple-threat-with-lia-lor-malena-morgan-and-dani-daniels/',
402 'md5': '612ba7b3cb99455b382972948e200b08',
405 'display_id': 'triple-threat-with-lia-lor-malena-morgan-and-dani-daniels',
407 'title': 'Triple Threat With Lia Lor, Malena Morgan And Dani Daniels',
408 'description': 'md5:285357d9d3a00ce5acb29f39f826dbf6',
409 'uploader': 'PatrickBush',
413 'dislike_count': int,
415 'timestamp': 1609455029,
416 'upload_date': '20201231',
417 'thumbnail': 'https://tn.porntop.com/media/tn/sources/101569_1.jpg',
421 def _real_extract(self
, url
):
422 video_id
, host
, display_id
= self
._match
_valid
_url
(url
).group('id', 'host', 'display_id')
423 webpage
= self
._download
_webpage
(url
, video_id
)
425 json_ld
= self
._json
_ld
(self
._search
_json
(
426 r
'\bschemaJson\s*=', webpage
, 'JSON-LD', video_id
, transform_source
=js_to_json
,
427 contains_pattern
='{[^<]+?VideoObject[^<]+};'), video_id
, fatal
=True)
429 video_file
= self
._parse
_json
(decode_base64(self
._search
_regex
(
430 r
"window\.initPlayer\(.*}}},\s*'(?P<json_b64c>[^']+)'",
431 webpage
, 'json_urls', group
='json_b64c')), video_id
)
435 'display_id': display_id
,
437 'formats': get_formats(host
, video_file
),