3 from .common
import InfoExtractor
12 class JableIE(InfoExtractor
):
13 _VALID_URL
= r
'https?://(?:www\.)?jable\.tv/videos/(?P<id>[\w-]+)'
15 'url': 'https://jable.tv/videos/pppd-812/',
16 'md5': 'f1537283a9bc073c31ff86ca35d9b2a6',
20 'title': 'PPPD-812 只要表現好巨乳女教師吉根柚莉愛就獎勵學生們在白虎穴內射出精液',
21 'description': 'md5:5b6d4199a854f62c5e56e26ccad19967',
22 'thumbnail': r
're:^https?://.*\.jpg$',
28 'url': 'https://jable.tv/videos/apak-220/',
29 'md5': '71f9239d69ced58ab74a816908847cc1',
33 'title': 'md5:5c3861b7cf80112a6e2b70bccf170824',
35 'thumbnail': r
're:^https?://.*\.jpg$',
39 'upload_date': '20220319',
43 def _real_extract(self
, url
):
44 video_id
= self
._match
_id
(url
)
45 webpage
= self
._download
_webpage
(url
, video_id
)
46 formats
= self
._extract
_m
3u8_formats
(
47 self
._search
_regex
(r
'var\s+hlsUrl\s*=\s*\'([^
\']+)', webpage, 'hls_url
'), video_id, 'mp4
', m3u8_id='hls
')
51 'title
': self._og_search_title(webpage),
52 'description
': self._og_search_description(webpage, default=''),
53 'thumbnail
': self._og_search_thumbnail(webpage, default=None),
56 'upload_date
': unified_strdate(self._search_regex(
57 r'class="inactive-color">\D
+\s
+(\d{4}
-\d
+-\d
+)', webpage, 'upload_date
', default=None)),
58 'view_count
': int_or_none(self._search_regex(
59 r'#icon-eye"></use></svg>\n*<span class="mr-3">([\d ]+)',
60 webpage
, 'view_count', default
='').replace(' ', '')),
61 'like_count': int_or_none(self
._search
_regex
(
62 r
'#icon-heart"></use></svg><span class="count">(\d+)', webpage
, 'link_count', default
=None)),
66 class JablePlaylistIE(InfoExtractor
):
67 _VALID_URL
= r
'https?://(?:www\.)?jable\.tv/(?:categories|models|tags)/(?P<id>[\w-]+)'
69 'url': 'https://jable.tv/models/kaede-karen/',
76 'url': 'https://jable.tv/categories/roleplay/',
77 'only_matching': True,
79 'url': 'https://jable.tv/tags/girl/',
80 'only_matching': True,
83 def _real_extract(self
, url
):
84 playlist_id
= self
._match
_id
(url
)
85 webpage
= self
._download
_webpage
(url
, playlist_id
)
87 def page_func(page_num
):
89 self
.url_result(player_url
, JableIE
)
90 for player_url
in orderedSet(re
.findall(
91 r
'href="(https://jable.tv/videos/[\w-]+/?)"',
92 self
._download
_webpage
(url
, playlist_id
, query
={
95 'function': 'get_block',
96 'block_id': 'list_videos_common_videos_list',
97 }, note
=f
'Downloading page {page_num + 1}')))]
99 return self
.playlist_result(
100 InAdvancePagedList(page_func
, int_or_none(self
._search
_regex
(
101 r
'from:(\d+)">[^<]+\s*»', webpage
, 'last page number', default
=1)), 24),
102 playlist_id
, self
._search
_regex
(
103 r
'<h2 class="h3-md mb-1">([^<]+)', webpage
, 'playlist title', default
=None))