mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[extractor/generic:quoted-html] Add extractor (#5213)
Extracts embeds from escaped HTML within `data-html` attribute. Related: https://github.com/ytdl-org/youtube-dl/issues/21294, https://github.com/yt-dlp/yt-dlp/pull/5121 Authored by: coletdjnz Co-authored-by: pukkandan <pukkandan.ytdlp@gmail.com>
This commit is contained in:
		| @@ -1,5 +1,8 @@ | ||||
| import re | ||||
| import urllib.parse | ||||
| 
 | ||||
| from .common import InfoExtractor | ||||
| from ..utils import make_archive_id | ||||
| from ..utils import make_archive_id, unescapeHTML | ||||
| 
 | ||||
| 
 | ||||
| class HTML5MediaEmbedIE(InfoExtractor): | ||||
| @@ -29,3 +32,84 @@ class HTML5MediaEmbedIE(InfoExtractor): | ||||
|             }) | ||||
|             self._sort_formats(entry['formats']) | ||||
|             yield entry | ||||
| 
 | ||||
| 
 | ||||
| class QuotedHTMLIE(InfoExtractor): | ||||
|     """For common cases of quoted/escaped html parts in the webpage""" | ||||
|     _VALID_URL = False | ||||
|     IE_NAME = 'generic:quoted-html' | ||||
|     IE_DESC = False  # Do not list | ||||
|     _WEBPAGE_TESTS = [{ | ||||
|         # 2 YouTube embeds in data-html | ||||
|         'url': 'https://24tv.ua/bronetransporteri-ozbroyenni-zsu-shho-vidomo-pro-bronovik-wolfhound_n2167966', | ||||
|         'info_dict': { | ||||
|             'id': 'bronetransporteri-ozbroyenni-zsu-shho-vidomo-pro-bronovik-wolfhound_n2167966', | ||||
|             'title': 'Броньовик Wolfhound: гігант, який допомагає ЗСУ знищувати окупантів на фронті', | ||||
|             'thumbnail': r're:^https?://.*\.jpe?g', | ||||
|             'timestamp': float, | ||||
|             'upload_date': str, | ||||
|             'description': 'md5:6816e1e5a65304bd7898e4c7eb1b26f7', | ||||
|             'age_limit': 0, | ||||
|         }, | ||||
|         'playlist_count': 2 | ||||
|     }, { | ||||
|         # Generic iframe embed of TV24UAPlayerIE within data-html | ||||
|         'url': 'https://24tv.ua/harkivyani-zgaduyut-misto-do-viyni-shhemlive-video_n1887584', | ||||
|         'info_dict': { | ||||
|             'id': '1887584', | ||||
|             'ext': 'mp4', | ||||
|             'title': 'Харків\'яни згадують місто до війни: щемливе відео', | ||||
|             'thumbnail': r're:^https?://.*\.jpe?g', | ||||
|         }, | ||||
|         'params': {'skip_download': True} | ||||
|     }, { | ||||
|         # YouTube embeds on Squarespace (data-html): https://github.com/ytdl-org/youtube-dl/issues/21294 | ||||
|         'url': 'https://www.harvardballetcompany.org/past-productions', | ||||
|         'info_dict': { | ||||
|             'id': 'past-productions', | ||||
|             'title': 'Productions — Harvard Ballet Company', | ||||
|             'age_limit': 0, | ||||
|             'description': 'Past Productions', | ||||
|         }, | ||||
|         'playlist_mincount': 26 | ||||
|     }, { | ||||
|         # Squarespace video embed, 2019-08-28, data-html | ||||
|         'url': 'http://ootboxford.com', | ||||
|         'info_dict': { | ||||
|             'id': 'Tc7b_JGdZfw', | ||||
|             'title': 'Out of the Blue, at Childish Things 10', | ||||
|             'ext': 'mp4', | ||||
|             'description': 'md5:a83d0026666cf5ee970f8bd1cfd69c7f', | ||||
|             'uploader_id': 'helendouglashouse', | ||||
|             'uploader': 'Helen & Douglas House', | ||||
|             'upload_date': '20140328', | ||||
|             'availability': 'public', | ||||
|             'view_count': int, | ||||
|             'channel': 'Helen & Douglas House', | ||||
|             'comment_count': int, | ||||
|             'uploader_url': 'http://www.youtube.com/user/helendouglashouse', | ||||
|             'duration': 253, | ||||
|             'channel_url': 'https://www.youtube.com/channel/UCTChGezrZVmlYlpMlkmulPA', | ||||
|             'playable_in_embed': True, | ||||
|             'age_limit': 0, | ||||
|             'channel_follower_count': int, | ||||
|             'channel_id': 'UCTChGezrZVmlYlpMlkmulPA', | ||||
|             'tags': 'count:6', | ||||
|             'categories': ['Nonprofits & Activism'], | ||||
|             'like_count': int, | ||||
|             'thumbnail': 'https://i.ytimg.com/vi/Tc7b_JGdZfw/hqdefault.jpg', | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': True, | ||||
|         }, | ||||
|     }] | ||||
| 
 | ||||
|     def _extract_from_webpage(self, url, webpage): | ||||
|         combined = '' | ||||
|         for _, html in re.findall(r'(?s)\bdata-html=(["\'])((?:(?!\1).)+)\1', webpage): | ||||
|             # unescapeHTML can handle " etc., unquote can handle percent encoding | ||||
|             unquoted_html = unescapeHTML(urllib.parse.unquote(html)) | ||||
|             if unquoted_html != html: | ||||
|                 combined += unquoted_html | ||||
|         if combined: | ||||
|             yield from self._extract_generic_embeds(url, combined) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Matthew
					Matthew