mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[ketnet] fix extraction(closes #27662)
This commit is contained in:
		| @@ -2,92 +2,71 @@ from __future__ import unicode_literals | |||||||
|  |  | ||||||
| from .canvas import CanvasIE | from .canvas import CanvasIE | ||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
|  | from ..compat import compat_urllib_parse_unquote | ||||||
|  | from ..utils import ( | ||||||
|  |     int_or_none, | ||||||
|  |     parse_iso8601, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| class KetnetIE(InfoExtractor): | class KetnetIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://(?:www\.)?ketnet\.be/(?:[^/]+/)*(?P<id>[^/?#&]+)' |     _VALID_URL = r'https?://(?:www\.)?ketnet\.be/(?P<id>(?:[^/]+/)*[^/?#&]+)' | ||||||
|     _TESTS = [{ |     _TESTS = [{ | ||||||
|         'url': 'https://www.ketnet.be/kijken/zomerse-filmpjes', |         'url': 'https://www.ketnet.be/kijken/n/nachtwacht/3/nachtwacht-s3a1-de-greystook', | ||||||
|         'md5': '6bdeb65998930251bbd1c510750edba9', |         'md5': '37b2b7bb9b3dcaa05b67058dc3a714a9', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
|             'id': 'zomerse-filmpjes', |             'id': 'pbs-pub-aef8b526-115e-4006-aa24-e59ff6c6ef6f$vid-ddb815bf-c8e7-467b-8879-6bad7a32cebd', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|             'title': 'Gluur mee op de filmset en op Pennenzakkenrock', |             'title': 'Nachtwacht - Reeks 3: Aflevering 1', | ||||||
|             'description': 'Gluur mee met Ghost Rockers op de filmset', |             'description': 'De Nachtwacht krijgt te maken met een parasiet', | ||||||
|             'thumbnail': r're:^https?://.*\.jpg$', |             'thumbnail': r're:^https?://.*\.jpg$', | ||||||
|         } |             'duration': 1468.02, | ||||||
|     }, { |             'timestamp': 1609225200, | ||||||
|         # mzid in playerConfig instead of sources |             'upload_date': '20201229', | ||||||
|         'url': 'https://www.ketnet.be/kijken/nachtwacht/de-greystook', |             'series': 'Nachtwacht', | ||||||
|         'md5': '90139b746a0a9bd7bb631283f6e2a64e', |             'season': 'Reeks 3', | ||||||
|         'info_dict': { |             'episode': 'De Greystook', | ||||||
|             'id': 'md-ast-4ac54990-ce66-4d00-a8ca-9eac86f4c475', |             'episode_number': 1, | ||||||
|             'display_id': 'md-ast-4ac54990-ce66-4d00-a8ca-9eac86f4c475', |  | ||||||
|             'ext': 'flv', |  | ||||||
|             'title': 'Nachtwacht: De Greystook', |  | ||||||
|             'description': 'md5:1db3f5dc4c7109c821261e7512975be7', |  | ||||||
|             'thumbnail': r're:^https?://.*\.jpg$', |  | ||||||
|             'duration': 1468.03, |  | ||||||
|         }, |         }, | ||||||
|         'expected_warnings': ['is not a supported codec', 'Unknown MIME type'], |         'expected_warnings': ['is not a supported codec', 'Unknown MIME type'], | ||||||
|     }, { |     }, { | ||||||
|         'url': 'https://www.ketnet.be/kijken/karrewiet/uitzending-8-september-2016', |         'url': 'https://www.ketnet.be/themas/karrewiet/jaaroverzicht-20200/karrewiet-het-jaar-van-black-mamba', | ||||||
|         'only_matching': True, |  | ||||||
|     }, { |  | ||||||
|         'url': 'https://www.ketnet.be/achter-de-schermen/sien-repeteert-voor-stars-for-life', |  | ||||||
|         'only_matching': True, |  | ||||||
|     }, { |  | ||||||
|         # mzsource, geo restricted to Belgium |  | ||||||
|         'url': 'https://www.ketnet.be/kijken/nachtwacht/de-bermadoe', |  | ||||||
|         'only_matching': True, |         'only_matching': True, | ||||||
|     }] |     }] | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         video_id = self._match_id(url) |         display_id = self._match_id(url) | ||||||
|  |  | ||||||
|         webpage = self._download_webpage(url, video_id) |         video = self._download_json( | ||||||
|  |             'https://senior-bff.ketnet.be/graphql', display_id, query={ | ||||||
|  |                 'query': '''{ | ||||||
|  |   video(id: "content/ketnet/nl/%s.model.json") { | ||||||
|  |     description | ||||||
|  |     episodeNr | ||||||
|  |     imageUrl | ||||||
|  |     mediaReference | ||||||
|  |     programTitle | ||||||
|  |     publicationDate | ||||||
|  |     seasonTitle | ||||||
|  |     subtitleVideodetail | ||||||
|  |     titleVideodetail | ||||||
|  |   } | ||||||
|  | }''' % display_id, | ||||||
|  |             })['data']['video'] | ||||||
|  |  | ||||||
|         config = self._parse_json( |         mz_id = compat_urllib_parse_unquote(video['mediaReference']) | ||||||
|             self._search_regex( |  | ||||||
|                 r'(?s)playerConfig\s*=\s*({.+?})\s*;', webpage, |  | ||||||
|                 'player config'), |  | ||||||
|             video_id) |  | ||||||
|  |  | ||||||
|         mzid = config.get('mzid') |  | ||||||
|         if mzid: |  | ||||||
|             return self.url_result( |  | ||||||
|                 'https://mediazone.vrt.be/api/v1/ketnet/assets/%s' % mzid, |  | ||||||
|                 CanvasIE.ie_key(), video_id=mzid) |  | ||||||
|  |  | ||||||
|         title = config['title'] |  | ||||||
|  |  | ||||||
|         formats = [] |  | ||||||
|         for source_key in ('', 'mz'): |  | ||||||
|             source = config.get('%ssource' % source_key) |  | ||||||
|             if not isinstance(source, dict): |  | ||||||
|                 continue |  | ||||||
|             for format_id, format_url in source.items(): |  | ||||||
|                 if format_id == 'hls': |  | ||||||
|                     formats.extend(self._extract_m3u8_formats( |  | ||||||
|                         format_url, video_id, 'mp4', |  | ||||||
|                         entry_protocol='m3u8_native', m3u8_id=format_id, |  | ||||||
|                         fatal=False)) |  | ||||||
|                 elif format_id == 'hds': |  | ||||||
|                     formats.extend(self._extract_f4m_formats( |  | ||||||
|                         format_url, video_id, f4m_id=format_id, fatal=False)) |  | ||||||
|                 else: |  | ||||||
|                     formats.append({ |  | ||||||
|                         'url': format_url, |  | ||||||
|                         'format_id': format_id, |  | ||||||
|                     }) |  | ||||||
|         self._sort_formats(formats) |  | ||||||
|  |  | ||||||
|         return { |         return { | ||||||
|             'id': video_id, |             '_type': 'url_transparent', | ||||||
|             'title': title, |             'id': mz_id, | ||||||
|             'description': config.get('description'), |             'title': video['titleVideodetail'], | ||||||
|             'thumbnail': config.get('image'), |             'url': 'https://mediazone.vrt.be/api/v1/ketnet/assets/' + mz_id, | ||||||
|             'series': config.get('program'), |             'thumbnail': video.get('imageUrl'), | ||||||
|             'episode': config.get('episode'), |             'description': video.get('description'), | ||||||
|             'formats': formats, |             'timestamp': parse_iso8601(video.get('publicationDate')), | ||||||
|  |             'series': video.get('programTitle'), | ||||||
|  |             'season': video.get('seasonTitle'), | ||||||
|  |             'episode': video.get('subtitleVideodetail'), | ||||||
|  |             'episode_number': int_or_none(video.get('episodeNr')), | ||||||
|  |             'ie_key': CanvasIE.ie_key(), | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user