mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[audimedia] fix extraction(closes #15309)
This commit is contained in:
		| @@ -5,13 +5,12 @@ from .common import InfoExtractor | |||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     int_or_none, |     int_or_none, | ||||||
|     parse_iso8601, |     parse_iso8601, | ||||||
|     sanitized_Request, |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| class AudiMediaIE(InfoExtractor): | class AudiMediaIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://(?:www\.)?audi-mediacenter\.com/(?:en|de)/audimediatv/(?P<id>[^/?#]+)' |     _VALID_URL = r'https?://(?:www\.)?audi-mediacenter\.com/(?:en|de)/audimediatv/(?:video/)?(?P<id>[^/?#]+)' | ||||||
|     _TEST = { |     _TESTS = [{ | ||||||
|         'url': 'https://www.audi-mediacenter.com/en/audimediatv/60-seconds-of-audi-sport-104-2015-wec-bahrain-rookie-test-1467', |         'url': 'https://www.audi-mediacenter.com/en/audimediatv/60-seconds-of-audi-sport-104-2015-wec-bahrain-rookie-test-1467', | ||||||
|         'md5': '79a8b71c46d49042609795ab59779b66', |         'md5': '79a8b71c46d49042609795ab59779b66', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
| @@ -24,41 +23,46 @@ class AudiMediaIE(InfoExtractor): | |||||||
|             'duration': 74022, |             'duration': 74022, | ||||||
|             'view_count': int, |             'view_count': int, | ||||||
|         } |         } | ||||||
|     } |     }, { | ||||||
|     # extracted from https://audimedia.tv/assets/embed/embedded-player.js (dataSourceAuthToken) |         'url': 'https://www.audi-mediacenter.com/en/audimediatv/video/60-seconds-of-audi-sport-104-2015-wec-bahrain-rookie-test-2991', | ||||||
|     _AUTH_TOKEN = 'e25b42847dba18c6c8816d5d8ce94c326e06823ebf0859ed164b3ba169be97f2' |         'only_matching': True, | ||||||
|  |     }] | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         display_id = self._match_id(url) |         display_id = self._match_id(url) | ||||||
|         webpage = self._download_webpage(url, display_id) |         webpage = self._download_webpage(url, display_id) | ||||||
|  |  | ||||||
|         raw_payload = self._search_regex([ |         raw_payload = self._search_regex([ | ||||||
|             r'class="amtv-embed"[^>]+id="([^"]+)"', |             r'class="amtv-embed"[^>]+id="([0-9a-z-]+)"', | ||||||
|             r'class=\\"amtv-embed\\"[^>]+id=\\"([^"]+)\\"', |             r'id="([0-9a-z-]+)"[^>]+class="amtv-embed"', | ||||||
|  |             r'class=\\"amtv-embed\\"[^>]+id=\\"([0-9a-z-]+)\\"', | ||||||
|  |             r'id=\\"([0-9a-z-]+)\\"[^>]+class=\\"amtv-embed\\"', | ||||||
|  |             r'id=(?:\\)?"(amtve-[a-z]-\d+-[a-z]{2})', | ||||||
|         ], webpage, 'raw payload') |         ], webpage, 'raw payload') | ||||||
|         _, stage_mode, video_id, lang = raw_payload.split('-') |         _, stage_mode, video_id, _ = raw_payload.split('-') | ||||||
|  |  | ||||||
|         # TODO: handle s and e stage_mode (live streams and ended live streams) |         # TODO: handle s and e stage_mode (live streams and ended live streams) | ||||||
|         if stage_mode not in ('s', 'e'): |         if stage_mode not in ('s', 'e'): | ||||||
|             request = sanitized_Request( |             video_data = self._download_json( | ||||||
|                 'https://audimedia.tv/api/video/v1/videos/%s?embed[]=video_versions&embed[]=thumbnail_image&where[content_language_iso]=%s' % (video_id, lang), |                 'https://www.audimedia.tv/api/video/v1/videos/' + video_id, | ||||||
|                 headers={'X-Auth-Token': self._AUTH_TOKEN}) |                 video_id, query={ | ||||||
|             json_data = self._download_json(request, video_id)['results'] |                     'embed[]': ['video_versions', 'thumbnail_image'], | ||||||
|  |                 })['results'] | ||||||
|             formats = [] |             formats = [] | ||||||
|  |  | ||||||
|             stream_url_hls = json_data.get('stream_url_hls') |             stream_url_hls = video_data.get('stream_url_hls') | ||||||
|             if stream_url_hls: |             if stream_url_hls: | ||||||
|                 formats.extend(self._extract_m3u8_formats( |                 formats.extend(self._extract_m3u8_formats( | ||||||
|                     stream_url_hls, video_id, 'mp4', |                     stream_url_hls, video_id, 'mp4', | ||||||
|                     entry_protocol='m3u8_native', m3u8_id='hls', fatal=False)) |                     entry_protocol='m3u8_native', m3u8_id='hls', fatal=False)) | ||||||
|  |  | ||||||
|             stream_url_hds = json_data.get('stream_url_hds') |             stream_url_hds = video_data.get('stream_url_hds') | ||||||
|             if stream_url_hds: |             if stream_url_hds: | ||||||
|                 formats.extend(self._extract_f4m_formats( |                 formats.extend(self._extract_f4m_formats( | ||||||
|                     stream_url_hds + '?hdcore=3.4.0', |                     stream_url_hds + '?hdcore=3.4.0', | ||||||
|                     video_id, f4m_id='hds', fatal=False)) |                     video_id, f4m_id='hds', fatal=False)) | ||||||
|  |  | ||||||
|             for video_version in json_data.get('video_versions'): |             for video_version in video_data.get('video_versions', []): | ||||||
|                 video_version_url = video_version.get('download_url') or video_version.get('stream_url') |                 video_version_url = video_version.get('download_url') or video_version.get('stream_url') | ||||||
|                 if not video_version_url: |                 if not video_version_url: | ||||||
|                     continue |                     continue | ||||||
| @@ -79,11 +83,11 @@ class AudiMediaIE(InfoExtractor): | |||||||
|  |  | ||||||
|             return { |             return { | ||||||
|                 'id': video_id, |                 'id': video_id, | ||||||
|                 'title': json_data['title'], |                 'title': video_data['title'], | ||||||
|                 'description': json_data.get('subtitle'), |                 'description': video_data.get('subtitle'), | ||||||
|                 'thumbnail': json_data.get('thumbnail_image', {}).get('file'), |                 'thumbnail': video_data.get('thumbnail_image', {}).get('file'), | ||||||
|                 'timestamp': parse_iso8601(json_data.get('publication_date')), |                 'timestamp': parse_iso8601(video_data.get('publication_date')), | ||||||
|                 'duration': int_or_none(json_data.get('duration')), |                 'duration': int_or_none(video_data.get('duration')), | ||||||
|                 'view_count': int_or_none(json_data.get('view_count')), |                 'view_count': int_or_none(video_data.get('view_count')), | ||||||
|                 'formats': formats, |                 'formats': formats, | ||||||
|             } |             } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user