mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[nbc] Fix ThePlatform embedded videos
This commit is contained in:
		| @@ -26,8 +26,7 @@ class NBCIE(InfoExtractor): | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         mobj = re.match(self._VALID_URL, url) |         video_id = self._match_id(url) | ||||||
|         video_id = mobj.group('id') |  | ||||||
|         webpage = self._download_webpage(url, video_id) |         webpage = self._download_webpage(url, video_id) | ||||||
|         theplatform_url = self._search_regex('class="video-player video-player-full" data-mpx-url="(.*?)"', webpage, 'theplatform url') |         theplatform_url = self._search_regex('class="video-player video-player-full" data-mpx-url="(.*?)"', webpage, 'theplatform url') | ||||||
|         if theplatform_url.startswith('//'): |         if theplatform_url.startswith('//'): | ||||||
| @@ -57,7 +56,7 @@ class NBCNewsIE(InfoExtractor): | |||||||
|             'md5': 'b2421750c9f260783721d898f4c42063', |             'md5': 'b2421750c9f260783721d898f4c42063', | ||||||
|             'info_dict': { |             'info_dict': { | ||||||
|                 'id': 'I1wpAI_zmhsQ', |                 'id': 'I1wpAI_zmhsQ', | ||||||
|                 'ext': 'flv', |                 'ext': 'mp4', | ||||||
|                 'title': 'How Twitter Reacted To The Snowden Interview', |                 'title': 'How Twitter Reacted To The Snowden Interview', | ||||||
|                 'description': 'md5:65a0bd5d76fe114f3c2727aa3a81fe64', |                 'description': 'md5:65a0bd5d76fe114f3c2727aa3a81fe64', | ||||||
|             }, |             }, | ||||||
| @@ -97,6 +96,8 @@ class NBCNewsIE(InfoExtractor): | |||||||
|             ] |             ] | ||||||
|  |  | ||||||
|             for base_url in base_urls: |             for base_url in base_urls: | ||||||
|  |                 if not base_url: | ||||||
|  |                     continue | ||||||
|                 playlist_url = base_url + '?form=MPXNBCNewsAPI' |                 playlist_url = base_url + '?form=MPXNBCNewsAPI' | ||||||
|                 all_videos = self._download_json(playlist_url, title)['videos'] |                 all_videos = self._download_json(playlist_url, title)['videos'] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ import json | |||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     compat_str, |     compat_str, | ||||||
|  |     determine_ext, | ||||||
|     ExtractorError, |     ExtractorError, | ||||||
|     xpath_with_ns, |     xpath_with_ns, | ||||||
| ) | ) | ||||||
| @@ -34,10 +35,21 @@ class ThePlatformIE(InfoExtractor): | |||||||
|             'skip_download': True, |             'skip_download': True, | ||||||
|         }, |         }, | ||||||
|     } |     } | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         mobj = re.match(self._VALID_URL, url) | ||||||
|  |         video_id = mobj.group('id') | ||||||
|  |         if mobj.group('config'): | ||||||
|  |             config_url = url+ '&form=json' | ||||||
|  |             config_url = config_url.replace('swf/', 'config/') | ||||||
|  |             config_url = config_url.replace('onsite/', 'onsite/config/') | ||||||
|  |             config = self._download_json(config_url, video_id, 'Downloading config') | ||||||
|  |             smil_url = config['releaseUrl'] + '&format=SMIL&formats=MPEG4&manifest=f4m' | ||||||
|  |         else: | ||||||
|  |             smil_url = ('http://link.theplatform.com/s/dJ5BDC/{0}/meta.smil?' | ||||||
|  |                 'format=smil&mbr=true'.format(video_id)) | ||||||
|  |  | ||||||
|  |  | ||||||
|     def _get_info(self, video_id, smil_url): |  | ||||||
|         meta = self._download_xml(smil_url, video_id) |         meta = self._download_xml(smil_url, video_id) | ||||||
|  |  | ||||||
|         try: |         try: | ||||||
|             error_msg = next( |             error_msg = next( | ||||||
|                 n.attrib['abstract'] |                 n.attrib['abstract'] | ||||||
| @@ -89,10 +101,14 @@ class ThePlatformIE(InfoExtractor): | |||||||
|                 for f in switch.findall(_x('smil:video')): |                 for f in switch.findall(_x('smil:video')): | ||||||
|                     attr = f.attrib |                     attr = f.attrib | ||||||
|                     vbr = int(attr['system-bitrate']) // 1000 |                     vbr = int(attr['system-bitrate']) // 1000 | ||||||
|  |                     ext = determine_ext(attr['src']) | ||||||
|  |                     if ext == 'once': | ||||||
|  |                         ext = 'mp4' | ||||||
|                     formats.append({ |                     formats.append({ | ||||||
|                         'format_id': compat_str(vbr), |                         'format_id': compat_str(vbr), | ||||||
|                         'url': attr['src'], |                         'url': attr['src'], | ||||||
|                         'vbr': vbr, |                         'vbr': vbr, | ||||||
|  |                         'ext': ext, | ||||||
|                     }) |                     }) | ||||||
|             self._sort_formats(formats) |             self._sort_formats(formats) | ||||||
|  |  | ||||||
| @@ -104,17 +120,3 @@ class ThePlatformIE(InfoExtractor): | |||||||
|             'thumbnail': info['defaultThumbnailUrl'], |             'thumbnail': info['defaultThumbnailUrl'], | ||||||
|             'duration': info['duration']//1000, |             'duration': info['duration']//1000, | ||||||
|         } |         } | ||||||
|          |  | ||||||
|     def _real_extract(self, url): |  | ||||||
|         mobj = re.match(self._VALID_URL, url) |  | ||||||
|         video_id = mobj.group('id') |  | ||||||
|         if mobj.group('config'): |  | ||||||
|             config_url = url+ '&form=json' |  | ||||||
|             config_url = config_url.replace('swf/', 'config/') |  | ||||||
|             config_url = config_url.replace('onsite/', 'onsite/config/') |  | ||||||
|             config = self._download_json(config_url, video_id, 'Downloading config') |  | ||||||
|             smil_url = config['releaseUrl'] + '&format=SMIL&formats=MPEG4&manifest=f4m' |  | ||||||
|         else: |  | ||||||
|             smil_url = ('http://link.theplatform.com/s/dJ5BDC/{0}/meta.smil?' |  | ||||||
|                 'format=smil&mbr=true'.format(video_id)) |  | ||||||
|         return self._get_info(video_id, smil_url) |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister