mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[iprima] Fix extraction (Closes #8953)
This commit is contained in:
		| @@ -1,4 +1,4 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # coding: utf-8 | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import re | ||||
| @@ -6,6 +6,8 @@ import time | ||||
|  | ||||
| from .common import InfoExtractor | ||||
| from ..utils import ( | ||||
|     determine_ext, | ||||
|     js_to_json, | ||||
|     sanitized_Request, | ||||
| ) | ||||
|  | ||||
| @@ -30,8 +32,7 @@ class IPrimaIE(InfoExtractor): | ||||
|     }] | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         video_id = mobj.group('id') | ||||
|         video_id = self._match_id(url) | ||||
|  | ||||
|         webpage = self._download_webpage(url, video_id) | ||||
|  | ||||
| @@ -43,9 +44,42 @@ class IPrimaIE(InfoExtractor): | ||||
|         req.add_header('Referer', url) | ||||
|         playerpage = self._download_webpage(req, video_id, note='Downloading player') | ||||
|  | ||||
|         m3u8_url = self._search_regex(r"'src': '([^']+\.m3u8)'", playerpage, 'm3u8 url') | ||||
|         formats = [] | ||||
|  | ||||
|         formats = self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4') | ||||
|         def extract_formats(format_url, format_key=None, lang=None): | ||||
|             ext = determine_ext(format_url) | ||||
|             new_formats = [] | ||||
|             if format_key == 'hls' or ext == 'm3u8': | ||||
|                 new_formats = self._extract_m3u8_formats( | ||||
|                     format_url, video_id, 'mp4', entry_protocol='m3u8_native', | ||||
|                     m3u8_id='hls', fatal=False) | ||||
|             elif format_key == 'dash' or ext == 'mpd': | ||||
|                 return | ||||
|                 new_formats = self._extract_mpd_formats( | ||||
|                     format_url, video_id, mpd_id='dash', fatal=False) | ||||
|             if lang: | ||||
|                 for f in new_formats: | ||||
|                     if not f.get('language'): | ||||
|                         f['language'] = lang | ||||
|             formats.extend(new_formats) | ||||
|  | ||||
|         options = self._parse_json( | ||||
|             self._search_regex( | ||||
|                 r'(?s)var\s+playerOptions\s*=\s*({.+?});', | ||||
|                 playerpage, 'player options', default='{}'), | ||||
|             video_id, transform_source=js_to_json, fatal=False) | ||||
|         if options: | ||||
|             for key, tracks in options.get('tracks', {}).items(): | ||||
|                 if not isinstance(tracks, list): | ||||
|                     continue | ||||
|                 for track in tracks: | ||||
|                     src = track.get('src') | ||||
|                     if src: | ||||
|                         extract_formats(src, key.lower(), track.get('lang')) | ||||
|  | ||||
|         if not formats: | ||||
|             for _, src in re.findall(r'src["\']\s*:\s*(["\'])(.+?)\1', playerpage): | ||||
|                 extract_formats(src) | ||||
|  | ||||
|         self._sort_formats(formats) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․