]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/hotnewhiphop.py
[ie/youtube] Extract upload timestamp if available (#9856)
[yt-dlp.git] / yt_dlp / extractor / hotnewhiphop.py
CommitLineData
5b66de88 1from .common import InfoExtractor
cf282071 2from ..compat import compat_b64decode
3d2623a8 3from ..networking import HEADRequest, Request
4from ..utils import ExtractorError, urlencode_postdata
5b66de88
JMS
5
6
7class HotNewHipHopIE(InfoExtractor):
df773c3d 8 _WORKING = False
92519402 9 _VALID_URL = r'https?://(?:www\.)?hotnewhiphop\.com/.*\.(?P<id>.*)\.html'
6f5ac90c 10 _TEST = {
99f770ca 11 'url': 'http://www.hotnewhiphop.com/freddie-gibbs-lay-it-down-song.1435540.html',
99f770ca
PH
12 'md5': '2c2cd2f76ef11a9b3b581e8b232f3d96',
13 'info_dict': {
5c40bba8
PH
14 'id': '1435540',
15 'ext': 'mp3',
99f770ca 16 'title': 'Freddie Gibbs - Lay It Down'
6f5ac90c
PH
17 }
18 }
5b66de88
JMS
19
20 def _real_extract(self, url):
5c40bba8
PH
21 video_id = self._match_id(url)
22 webpage = self._download_webpage(url, video_id)
5b66de88 23
99f770ca 24 video_url_base64 = self._search_regex(
5c40bba8 25 r'data-path="(.*?)"', webpage, 'video URL', default=None)
ed54491c 26
99f770ca
PH
27 if video_url_base64 is None:
28 video_url = self._search_regex(
5c40bba8 29 r'"contentUrl" content="(.*?)"', webpage, 'content URL')
ed54491c 30 return self.url_result(video_url, ie='Youtube')
5b66de88 31
6e6bc8da 32 reqdata = urlencode_postdata([
99f770ca
PH
33 ('mediaType', 's'),
34 ('mediaId', video_id),
35 ])
3d2623a8 36 r = Request(
99f770ca 37 'http://www.hotnewhiphop.com/ajax/media/getActions/', data=reqdata)
3d2623a8 38 r.headers['Content-Type'] = 'application/x-www-form-urlencoded'
99f770ca
PH
39 mkd = self._download_json(
40 r, video_id, note='Requesting media key',
41 errnote='Could not download media key')
42 if 'mediaKey' not in mkd:
43 raise ExtractorError('Did not get a media key')
44
cf282071 45 redirect_url = compat_b64decode(video_url_base64).decode('utf-8')
99f770ca
PH
46 redirect_req = HEADRequest(redirect_url)
47 req = self._request_webpage(
48 redirect_req, video_id,
49 note='Resolving final URL', errnote='Could not resolve final URL')
3d2623a8 50 video_url = req.url
99f770ca
PH
51 if video_url.endswith('.html'):
52 raise ExtractorError('Redirect failed')
5b66de88 53
5c40bba8 54 video_title = self._og_search_title(webpage).strip()
5b66de88 55
99f770ca
PH
56 return {
57 'id': video_id,
58 'url': video_url,
59 'title': video_title,
5c40bba8 60 'thumbnail': self._og_search_thumbnail(webpage),
99f770ca 61 }