mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[npo] Add support for streams (Closes #4276)
This commit is contained in:
		| @@ -9,6 +9,7 @@ from ..utils import ( | |||||||
|     qualities, |     qualities, | ||||||
|     strip_jsonp, |     strip_jsonp, | ||||||
|     url_basename, |     url_basename, | ||||||
|  |     fix_xml_ampersands, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -51,7 +52,21 @@ class NPOIE(InfoExtractor): | |||||||
|                 'upload_date': '20130225', |                 'upload_date': '20130225', | ||||||
|                 'duration': 3000, |                 'duration': 3000, | ||||||
|             }, |             }, | ||||||
|         } |         }, | ||||||
|  |         { | ||||||
|  |             'url': 'http://www.npo.nl/de-nieuwe-mens-deel-1/21-07-2010/WO_VPRO_043706', | ||||||
|  |             'info_dict': { | ||||||
|  |                 'id': 'WO_VPRO_043706', | ||||||
|  |                 'ext': 'wmv', | ||||||
|  |                 'title': 'De nieuwe mens - Deel 1', | ||||||
|  |                 'description': 'md5:518ae51ba1293ffb80d8d8ce90b74e4b', | ||||||
|  |                 'duration': 4680, | ||||||
|  |             }, | ||||||
|  |             'params': { | ||||||
|  |                 # mplayer mms download | ||||||
|  |                 'skip_download': True, | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
| @@ -74,31 +89,58 @@ class NPOIE(InfoExtractor): | |||||||
|         token = self._search_regex(r'npoplayer\.token = "(.+?)"', token_page, 'token') |         token = self._search_regex(r'npoplayer\.token = "(.+?)"', token_page, 'token') | ||||||
|  |  | ||||||
|         formats = [] |         formats = [] | ||||||
|         quality = qualities(['adaptive', 'wmv_sb', 'h264_sb', 'wmv_bb', 'h264_bb', 'wvc1_std', 'h264_std']) |  | ||||||
|         for format_id in metadata['pubopties']: |         pubopties = metadata.get('pubopties') | ||||||
|             format_info = self._download_json( |         if pubopties: | ||||||
|                 'http://ida.omroep.nl/odi/?prid=%s&puboptions=%s&adaptive=yes&token=%s' % (video_id, format_id, token), |             quality = qualities(['adaptive', 'wmv_sb', 'h264_sb', 'wmv_bb', 'h264_bb', 'wvc1_std', 'h264_std']) | ||||||
|                 video_id, 'Downloading %s JSON' % format_id) |             for format_id in pubopties: | ||||||
|             if format_info.get('error_code', 0) or format_info.get('errorcode', 0): |                 format_info = self._download_json( | ||||||
|                 continue |                     'http://ida.omroep.nl/odi/?prid=%s&puboptions=%s&adaptive=yes&token=%s' | ||||||
|             streams = format_info.get('streams') |                     % (video_id, format_id, token), | ||||||
|             if streams: |                     video_id, 'Downloading %s JSON' % format_id) | ||||||
|                 video_info = self._download_json( |                 if format_info.get('error_code', 0) or format_info.get('errorcode', 0): | ||||||
|                     streams[0] + '&type=json', |                     continue | ||||||
|                     video_id, 'Downloading %s stream JSON' % format_id) |                 streams = format_info.get('streams') | ||||||
|             else: |                 if streams: | ||||||
|                 video_info = format_info |                     video_info = self._download_json( | ||||||
|             video_url = video_info.get('url') |                         streams[0] + '&type=json', | ||||||
|             if not video_url: |                         video_id, 'Downloading %s stream JSON' % format_id) | ||||||
|                 continue |                 else: | ||||||
|             if format_id == 'adaptive': |                     video_info = format_info | ||||||
|                 formats.extend(self._extract_m3u8_formats(video_url, video_id)) |                 video_url = video_info.get('url') | ||||||
|             else: |                 if not video_url: | ||||||
|  |                     continue | ||||||
|  |                 if format_id == 'adaptive': | ||||||
|  |                     formats.extend(self._extract_m3u8_formats(video_url, video_id)) | ||||||
|  |                 else: | ||||||
|  |                     formats.append({ | ||||||
|  |                         'url': video_url, | ||||||
|  |                         'format_id': format_id, | ||||||
|  |                         'quality': quality(format_id), | ||||||
|  |                     }) | ||||||
|  |  | ||||||
|  |         streams = metadata.get('streams') | ||||||
|  |         if streams: | ||||||
|  |             for i, stream in enumerate(streams): | ||||||
|  |                 stream_url = stream.get('url') | ||||||
|  |                 if not stream_url: | ||||||
|  |                     continue | ||||||
|  |                 asx = self._download_xml( | ||||||
|  |                     stream_url, video_id, | ||||||
|  |                     'Downloading stream %d ASX playlist' % i, | ||||||
|  |                     transform_source=fix_xml_ampersands) | ||||||
|  |                 ref = asx.find('./ENTRY/Ref') | ||||||
|  |                 if ref is None: | ||||||
|  |                     continue | ||||||
|  |                 video_url = ref.get('href') | ||||||
|  |                 if not video_url: | ||||||
|  |                     continue | ||||||
|                 formats.append({ |                 formats.append({ | ||||||
|                     'url': video_url, |                     'url': video_url, | ||||||
|                     'format_id': format_id, |                     'ext': stream.get('formaat', 'asf'), | ||||||
|                     'quality': quality(format_id), |                     'quality': stream.get('kwaliteit'), | ||||||
|                 }) |                 }) | ||||||
|  |  | ||||||
|         self._sort_formats(formats) |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|         return { |         return { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․