-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update to ytdl-commit-a08f2b7 (#10012)
[ie] Rework JWPlayer extraction - ytdl-org/youtube-dl@f663724 [ie/gbnews] Add extractor - ytdl-org/youtube-dl@70f230f [ie/caffeinetv] Add extractor - ytdl-org/youtube-dl@40bd5c1 [ie/youporn] Improve extraction - ytdl-org/youtube-dl@0b2ce36 [ie/youporn] Add playlist extractors - ytdl-org/youtube-dl@668332b Closes #9188, Closes #9523 Authored by: Grub4K, bashonly
- Loading branch information
Showing
6 changed files
with
588 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
from .common import InfoExtractor | ||
from ..utils import ( | ||
determine_ext, | ||
int_or_none, | ||
parse_iso8601, | ||
traverse_obj, | ||
urljoin, | ||
) | ||
|
||
|
||
class CaffeineTVIE(InfoExtractor): | ||
_VALID_URL = r'https?://(?:www\.)?caffeine\.tv/[^/?#]+/video/(?P<id>[\da-f-]+)' | ||
_TESTS = [{ | ||
'url': 'https://www.caffeine.tv/TsuSurf/video/cffc0a00-e73f-11ec-8080-80017d29f26e', | ||
'info_dict': { | ||
'id': 'cffc0a00-e73f-11ec-8080-80017d29f26e', | ||
'ext': 'mp4', | ||
'title': 'GOOOOD MORNINNNNN #highlights', | ||
'timestamp': 1654702180, | ||
'upload_date': '20220608', | ||
'uploader': 'RahJON Wicc', | ||
'uploader_id': 'TsuSurf', | ||
'duration': 3145, | ||
'age_limit': 17, | ||
'thumbnail': 'https://www.caffeine.tv/broadcasts/776b6f84-9cd5-42e3-af1d-4a776eeed697/replay/lobby.jpg', | ||
'comment_count': int, | ||
'view_count': int, | ||
'like_count': int, | ||
'tags': ['highlights', 'battlerap'], | ||
}, | ||
'params': { | ||
'skip_download': 'm3u8', | ||
}, | ||
}] | ||
|
||
def _real_extract(self, url): | ||
video_id = self._match_id(url) | ||
json_data = self._download_json( | ||
f'https://api.caffeine.tv/social/public/activity/{video_id}', video_id) | ||
broadcast_info = traverse_obj(json_data, ('broadcast_info', {dict})) or {} | ||
|
||
video_url = broadcast_info['video_url'] | ||
ext = determine_ext(video_url) | ||
if ext == 'm3u8': | ||
formats = self._extract_m3u8_formats(video_url, video_id, 'mp4') | ||
else: | ||
formats = [{'url': video_url}] | ||
|
||
return { | ||
'id': video_id, | ||
'formats': formats, | ||
**traverse_obj(json_data, { | ||
'like_count': ('like_count', {int_or_none}), | ||
'view_count': ('view_count', {int_or_none}), | ||
'comment_count': ('comment_count', {int_or_none}), | ||
'tags': ('tags', ..., {str}, {lambda x: x or None}), | ||
'uploader': ('user', 'name', {str}), | ||
'uploader_id': (((None, 'user'), 'username'), {str}, any), | ||
'is_live': ('is_live', {bool}), | ||
}), | ||
**traverse_obj(broadcast_info, { | ||
'title': ('broadcast_title', {str}), | ||
'duration': ('content_duration', {int_or_none}), | ||
'timestamp': ('broadcast_start_time', {parse_iso8601}), | ||
'thumbnail': ('preview_image_path', {lambda x: urljoin(url, x)}), | ||
}), | ||
'age_limit': { | ||
# assume Apple Store ratings: https://en.wikipedia.org/wiki/Mobile_software_content_rating_system | ||
'FOUR_PLUS': 0, | ||
'NINE_PLUS': 9, | ||
'TWELVE_PLUS': 12, | ||
'SEVENTEEN_PLUS': 17, | ||
}.get(broadcast_info.get('content_rating'), 17), | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
import functools | ||
|
||
from .common import InfoExtractor | ||
from ..utils import ( | ||
ExtractorError, | ||
extract_attributes, | ||
get_elements_html_by_class, | ||
url_or_none, | ||
) | ||
from ..utils.traversal import traverse_obj | ||
|
||
|
||
class GBNewsIE(InfoExtractor): | ||
IE_DESC = 'GB News clips, features and live streams' | ||
_VALID_URL = r'https?://(?:www\.)?gbnews\.(?:uk|com)/(?:\w+/)?(?P<id>[^#?]+)' | ||
|
||
_PLATFORM = 'safari' | ||
_SSMP_URL = 'https://mm-v2.simplestream.com/ssmp/api.php' | ||
_TESTS = [{ | ||
'url': 'https://www.gbnews.com/news/bbc-claudine-gay-harvard-university-antisemitism-row', | ||
'info_dict': { | ||
'id': '52264136', | ||
'ext': 'mp4', | ||
'thumbnail': r're:https?://www\.gbnews\.\w+/.+\.(?:jpe?g|png|webp)', | ||
'display_id': 'bbc-claudine-gay-harvard-university-antisemitism-row', | ||
'description': 'The post was criticised by former employers of the broadcaster', | ||
'title': 'BBC deletes post after furious backlash over headline downplaying antisemitism', | ||
}, | ||
}, { | ||
'url': 'https://www.gbnews.com/royal/prince-harry-in-love-with-kate-meghan-markle-jealous-royal', | ||
'info_dict': { | ||
'id': '52328390', | ||
'ext': 'mp4', | ||
'thumbnail': r're:https?://www\.gbnews\.\w+/.+\.(?:jpe?g|png|webp)', | ||
'display_id': 'prince-harry-in-love-with-kate-meghan-markle-jealous-royal', | ||
'description': 'Ingrid Seward has published 17 books documenting the highs and lows of the Royal Family', | ||
'title': 'Royal author claims Prince Harry was \'in love\' with Kate - Meghan was \'jealous\'', | ||
} | ||
}, { | ||
'url': 'https://www.gbnews.uk/watchlive', | ||
'info_dict': { | ||
'id': '1069', | ||
'ext': 'mp4', | ||
'thumbnail': r're:https?://www\.gbnews\.\w+/.+\.(?:jpe?g|png|webp)', | ||
'display_id': 'watchlive', | ||
'live_status': 'is_live', | ||
'title': r're:^GB News Live', | ||
}, | ||
'params': {'skip_download': 'm3u8'}, | ||
}] | ||
|
||
@functools.lru_cache | ||
def _get_ss_endpoint(self, data_id, data_env): | ||
if not data_id: | ||
data_id = 'GB003' | ||
if not data_env: | ||
data_env = 'production' | ||
|
||
json_data = self._download_json( | ||
self._SSMP_URL, None, 'Downloading Simplestream JSON metadata', query={ | ||
'id': data_id, | ||
'env': data_env, | ||
}) | ||
meta_url = traverse_obj(json_data, ('response', 'api_hostname', {url_or_none})) | ||
if not meta_url: | ||
raise ExtractorError('No API host found') | ||
|
||
return meta_url | ||
|
||
def _real_extract(self, url): | ||
display_id = self._match_id(url).rpartition('/')[2] | ||
webpage = self._download_webpage(url, display_id) | ||
|
||
video_data = None | ||
elements = get_elements_html_by_class('simplestream', webpage) | ||
for html_tag in elements: | ||
attributes = extract_attributes(html_tag) | ||
if 'sidebar' not in (attributes.get('class') or ''): | ||
video_data = attributes | ||
if not video_data: | ||
raise ExtractorError('Could not find video element', expected=True) | ||
|
||
endpoint_url = self._get_ss_endpoint(video_data.get('data-id'), video_data.get('data-env')) | ||
|
||
uvid = video_data['data-uvid'] | ||
video_type = video_data.get('data-type') | ||
if not video_type or video_type == 'vod': | ||
video_type = 'show' | ||
stream_data = self._download_json( | ||
f'{endpoint_url}/api/{video_type}/stream/{uvid}', | ||
uvid, 'Downloading stream JSON', query={ | ||
'key': video_data.get('data-key'), | ||
'platform': self._PLATFORM, | ||
}) | ||
if traverse_obj(stream_data, 'drm'): | ||
self.report_drm(uvid) | ||
|
||
return { | ||
'id': uvid, | ||
'display_id': display_id, | ||
'title': self._og_search_title(webpage, default=None), | ||
'description': self._og_search_description(webpage, default=None), | ||
'formats': self._extract_m3u8_formats(traverse_obj(stream_data, ( | ||
'response', 'stream', {url_or_none})), uvid, 'mp4'), | ||
'thumbnail': self._og_search_thumbnail(webpage, default=None), | ||
'is_live': video_type == 'live', | ||
} |
Oops, something went wrong.