3 from .common
import InfoExtractor
4 from ..compat
import compat_urllib_parse_urlencode
11 class EroProfileIE(InfoExtractor
):
12 _VALID_URL
= r
'https?://(?:www\.)?eroprofile\.com/m/videos/view/(?P<id>[^/]+)'
13 _LOGIN_URL
= 'http://www.eroprofile.com/auth/auth.php?'
14 _NETRC_MACHINE
= 'eroprofile'
16 'url': 'http://www.eroprofile.com/m/videos/view/sexy-babe-softcore',
17 'md5': 'c26f351332edf23e1ea28ce9ec9de32f',
20 'display_id': 'sexy-babe-softcore',
22 'title': 'sexy babe softcore',
23 'thumbnail': r
're:https?://.*\.jpg',
26 'skip': 'Video not found',
28 'url': 'http://www.eroprofile.com/m/videos/view/Try-It-On-Pee_cut_2-wmv-4shared-com-file-sharing-download-movie-file',
29 'md5': '1baa9602ede46ce904c431f5418d8916',
33 'title': 'Try It On Pee_cut_2.wmv - 4shared.com - file sharing - download movie file',
34 'thumbnail': r
're:https?://.*\.jpg',
37 'skip': 'Requires login',
40 def _perform_login(self
, username
, password
):
41 query
= compat_urllib_parse_urlencode({
44 'url': 'http://www.eroprofile.com/',
46 login_url
= self
._LOGIN
_URL
+ query
47 login_page
= self
._download
_webpage
(login_url
, None, False)
49 m
= re
.search(r
'Your username or password was incorrect\.', login_page
)
52 'Wrong username and/or password.', expected
=True)
55 redirect_url
= self
._search
_regex
(
56 r
'<script[^>]+?src="([^"]+)"', login_page
, 'login redirect url')
57 self
._download
_webpage
(redirect_url
, None, False)
59 def _real_extract(self
, url
):
60 display_id
= self
._match
_id
(url
)
62 webpage
= self
._download
_webpage
(url
, display_id
)
64 m
= re
.search(r
'You must be logged in to view this video\.', webpage
)
66 self
.raise_login_required('This video requires login')
68 video_id
= self
._search
_regex
(
69 [r
"glbUpdViews\s*\('\d*','(\d+)'", r
'p/report/video/(\d+)'],
70 webpage
, 'video id', default
=None)
72 title
= self
._html
_search
_regex
(
73 (r
'Title:</th><td>([^<]+)</td>', r
'<h1[^>]*>(.+?)</h1>'),
76 info
= self
._parse
_html
5_media
_entries
(url
, webpage
, video_id
)[0]
78 return merge_dicts(info
, {
80 'display_id': display_id
,
86 class EroProfileAlbumIE(InfoExtractor
):
87 _VALID_URL
= r
'https?://(?:www\.)?eroprofile\.com/m/videos/album/(?P<id>[^/]+)'
88 IE_NAME
= 'EroProfile:album'
91 'url': 'https://www.eroprofile.com/m/videos/album/BBW-2-893',
96 'playlist_mincount': 486,
100 def _extract_from_page(self
, page
):
101 for url
in re
.findall(r
'href=".*?(/m/videos/view/[^"]+)"', page
):
102 yield self
.url_result(f
'https://www.eroprofile.com{url}', EroProfileIE
.ie_key())
104 def _entries(self
, playlist_id
, first_page
):
105 yield from self
._extract
_from
_page
(first_page
)
107 page_urls
= re
.findall(rf
'href=".*?(/m/videos/album/{playlist_id}\?pnum=(\d+))"', first_page
)
108 max_page
= max(int(n
) for _
, n
in page_urls
)
110 for n
in range(2, max_page
+ 1):
111 url
= f
'https://www.eroprofile.com/m/videos/album/{playlist_id}?pnum={n}'
112 yield from self
._extract
_from
_page
(
113 self
._download
_webpage
(url
, playlist_id
,
114 note
=f
'Downloading playlist page {int(n) - 1}'))
116 def _real_extract(self
, url
):
117 playlist_id
= self
._match
_id
(url
)
118 first_page
= self
._download
_webpage
(url
, playlist_id
, note
='Downloading playlist')
119 playlist_title
= self
._search
_regex
(
120 r
'<title>Album: (.*) - EroProfile</title>', first_page
, 'playlist_title')
122 return self
.playlist_result(self
._entries
(playlist_id
, first_page
), playlist_id
, playlist_title
)