1 from .common
import InfoExtractor
2 from ..compat
import compat_urlparse
13 class PiaproIE(InfoExtractor
):
14 _NETRC_MACHINE
= 'piapro'
15 _VALID_URL
= r
'https?://piapro\.jp/(?:t|content)/(?P<id>[\w-]+)/?'
17 'url': 'https://piapro.jp/t/NXYR',
18 'md5': 'f7c0f760913fb1d44a1c45a4af793909',
23 'uploader_id': 'wowaka',
25 'description': 'http://www.nicovideo.jp/watch/sm8082467',
27 'timestamp': 1251785475,
28 'thumbnail': r
're:^https?://.*\.(?:png|jpg)$',
29 'upload_date': '20090901',
33 'note': 'There are break lines in description, mandating (?s) flag',
34 'url': 'https://piapro.jp/t/9cSd',
35 'md5': '952bb6d1e8de95050206408a87790676',
39 'title': '青に溶けた風船 / 初音ミク',
40 'description': 'md5:d395a9bd151447631a5a1460bc7f9132',
43 'timestamp': 1644030039,
44 'upload_date': '20220205',
46 'thumbnail': r
're:^https?://.*\.(?:png|jpg)$',
47 'uploader_id': 'cyankino',
50 'url': 'https://piapro.jp/content/hcw0z3a169wtemz6',
53 'url': 'https://piapro.jp/t/-SO-',
59 def _perform_login(self
, username
, password
):
62 '_username': username
,
63 '_password': password
,
67 self
._request
_webpage
('https://piapro.jp/login/', None)
68 urlh
= self
._request
_webpage
(
69 'https://piapro.jp/login/exe', None,
70 note
='Logging in', errnote
='Unable to log in',
71 data
=urlencode_postdata(login_form_strs
))
75 parts
= compat_urlparse
.urlparse(urlh
.url
)
80 'unable to log in: bad username or password')
81 self
._login
_status
= login_ok
83 def _real_extract(self
, url
):
84 video_id
= self
._match
_id
(url
)
85 webpage
= self
._download
_webpage
(url
, video_id
)
87 category_id
= self
._search
_regex
(r
'categoryId=(.+)">', webpage
, 'category ID')
88 if category_id
not in ('1', '2', '21', '22', '23', '24', '25'):
89 raise ExtractorError('The URL does not contain audio.', expected
=True)
91 str_duration
, str_filesize
= self
._search
_regex
(
92 r
'サイズ:</span>(.+?)/\(([0-9,]+?[KMG]?B))', webpage
, 'duration and size',
93 group
=(1, 2), default
=(None, None))
94 str_viewcount
= self
._search
_regex
(r
'閲覧数:</span>([0-9,]+)\s+', webpage
, 'view count', fatal
=False)
96 uploader_id
, uploader
= self
._search
_regex
(
97 r
'<a\s+class="cd_user-name"\s+href="/(.*)">([^<]+)さん<', webpage
, 'uploader',
98 group
=(1, 2), default
=(None, None))
99 content_id
= self
._search
_regex
(r
'contentId\:\'(.+)\'', webpage, 'content ID
')
100 create_date = self._search_regex(r'createDate\
:\'(.+)\'', webpage, 'timestamp
')
102 player_webpage = self._download_webpage(
103 f'https
://piapro
.jp
/html5_player_popup
/?
id={content_id}
&cdate
={create_date}
',
104 video_id, note='Downloading player webpage
')
108 'title
': self._html_search_regex(r'<h1\s
+class="cd_works-title">(.+?
)</h1
>', webpage, 'title
', fatal=False),
109 'description
': self._html_search_regex(r'(?s
)<p\s
+class="cd_dtl_cap">(.+?
)</p
>\s
*<div
', webpage, 'description
', fatal=False),
110 'uploader
': uploader,
111 'uploader_id
': uploader_id,
112 'timestamp
': unified_timestamp(create_date, False),
113 'duration
': parse_duration(str_duration),
114 'view_count
': str_to_int(str_viewcount),
115 'thumbnail
': self._html_search_meta('twitter
:image
', webpage),
117 'filesize_approx
': parse_filesize(str_filesize.replace(',', '')),
118 'url
': self._search_regex(r'mp3
:\s
*\'(.*?
)\'\
}', player_webpage, 'url
'),