diff --git a/youtube_dl/extractor/newgrounds.py b/youtube_dl/extractor/newgrounds.py index 82e7cf522..46a6b0225 100644 --- a/youtube_dl/extractor/newgrounds.py +++ b/youtube_dl/extractor/newgrounds.py @@ -5,7 +5,6 @@ import re from .common import InfoExtractor from ..utils import ( extract_attributes, - int_or_none, parse_duration, parse_filesize, unified_timestamp, @@ -27,15 +26,15 @@ class NewgroundsIE(InfoExtractor): 'duration': 143, }, }, { - 'url': 'https://www.newgrounds.com/portal/view/673111', - 'md5': '3394735822aab2478c31b1004fe5e5bc', + 'url': 'https://www.newgrounds.com/portal/view/850292', + 'md5': 'bb7cacf45e1b4d648e2dac2d79284d67', 'info_dict': { - 'id': '673111', + 'id': '850292', 'ext': 'mp4', - 'title': 'Dancin', - 'uploader': 'Squirrelman82', - 'timestamp': 1460256780, - 'upload_date': '20160410', + 'title': 'Timeless (2021)', + 'uploader': 'Kevuhn', + 'timestamp': 1657896960, + 'upload_date': '20220715', }, }, { # source format unavailable, additional mp4 formats @@ -44,7 +43,7 @@ class NewgroundsIE(InfoExtractor): 'id': '689400', 'ext': 'mp4', 'title': 'ZTV News Episode 8', - 'uploader': 'BennettTheSage', + 'uploader': 'ZONE-SAMA', 'timestamp': 1487965140, 'upload_date': '20170224', }, @@ -58,40 +57,46 @@ class NewgroundsIE(InfoExtractor): webpage = self._download_webpage(url, media_id) - title = self._html_search_regex( - r'([^>]+)', webpage, 'title') + paths = url.split('/') + if paths[-3] == 'audio': + isAudio = True + else: + isAudio = False - media_url = self._parse_json(self._search_regex( - r'"url"\s*:\s*("[^"]+"),', webpage, ''), media_id) + if isAudio: + media_url = self._parse_json(self._search_regex( + r'"url"\s*:\s*("[^"]+"),', webpage, ''), media_id) - formats = [{ - 'url': media_url, - 'format_id': 'source', - 'quality': 1, - }] + uploader = self._html_search_regex( + (r'(?s)]*>(.+?).*?\s*Author\s*', + r'(?:Author|Writer)\s*]+>([^<]+)'), webpage, 'uploader', + fatal=False) - max_resolution = int_or_none(self._search_regex( - r'max_resolution["\']\s*:\s*(\d+)', webpage, 'max resolution', - default=None)) - if max_resolution: - url_base = media_url.rpartition('.')[0] - for resolution in (360, 720, 1080): - if resolution > max_resolution: - break - formats.append({ - 'url': '%s.%dp.mp4' % (url_base, resolution), - 'format_id': '%dp' % resolution, - 'height': resolution, - }) + formats = [{ + 'url': media_url, + 'format_id': 'source', + 'quality': 1, + }] - self._check_formats(formats, media_id) - self._sort_formats(formats) + else: + media_url = 'https://www.newgrounds.com/portal/video/' + media_id + media = self._download_json(media_url, media_id, headers={'X-Requested-With': 'XMLHttpRequest'}) + + uploader = media['author'] + + sources = media['sources'] - uploader = self._html_search_regex( - (r'(?s)]*>(.+?).*?\s*Author\s*', - r'(?:Author|Writer)\s*]+>([^<]+)'), webpage, 'uploader', - fatal=False) + formats = [] + for source in sources: + for i in range(len(sources[source])): + formats.append({ + 'url': sources[source][i]['src'], + 'format_id': source, + 'height': int(source[:-2]) # 1080p -> 1080 + }) + title = self._html_search_regex( + r'([^>]+)', webpage, 'title') timestamp = unified_timestamp(self._html_search_regex( (r'
\s*Uploaded\s*
\s*
([^<]+
\s*
[^<]+)', r'
\s*Uploaded\s*
\s*
([^<]+)'), webpage, 'timestamp', @@ -99,7 +104,6 @@ class NewgroundsIE(InfoExtractor): duration = parse_duration(self._search_regex( r'(?s)
\s*Song\s*
\s*
.+?
\s*
([^<]+)', webpage, 'duration', default=None)) - filesize_approx = parse_filesize(self._html_search_regex( r'(?s)
\s*Song\s*
\s*
(.+?)
', webpage, 'filesize', default=None)) @@ -109,6 +113,9 @@ class NewgroundsIE(InfoExtractor): if '
Song' in webpage: formats[0]['vcodec'] = 'none' + self._check_formats(formats, media_id) + self._sort_formats(formats) + return { 'id': media_id, 'title': title,