mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[fd/hls] Support --write-pages for m3u8 media playlists (#12333)
				
					
				
			Authored by: bashonly
This commit is contained in:
		| @@ -2,7 +2,6 @@ import base64 | ||||
| import collections | ||||
| import functools | ||||
| import getpass | ||||
| import hashlib | ||||
| import http.client | ||||
| import http.cookiejar | ||||
| import http.cookies | ||||
| @@ -78,7 +77,6 @@ from ..utils import ( | ||||
|     parse_iso8601, | ||||
|     parse_m3u8_attributes, | ||||
|     parse_resolution, | ||||
|     sanitize_filename, | ||||
|     sanitize_url, | ||||
|     smuggle_url, | ||||
|     str_or_none, | ||||
| @@ -100,6 +98,7 @@ from ..utils import ( | ||||
|     xpath_text, | ||||
|     xpath_with_ns, | ||||
| ) | ||||
| from ..utils._utils import _request_dump_filename | ||||
| 
 | ||||
| 
 | ||||
| class InfoExtractor: | ||||
| @@ -1022,23 +1021,6 @@ class InfoExtractor: | ||||
|                 'Visit http://blocklist.rkn.gov.ru/ for a block reason.', | ||||
|                 expected=True) | ||||
| 
 | ||||
|     def _request_dump_filename(self, url, video_id, data=None): | ||||
|         if data is not None: | ||||
|             data = hashlib.md5(data).hexdigest() | ||||
|         basen = join_nonempty(video_id, data, url, delim='_') | ||||
|         trim_length = self.get_param('trim_file_name') or 240 | ||||
|         if len(basen) > trim_length: | ||||
|             h = '___' + hashlib.md5(basen.encode()).hexdigest() | ||||
|             basen = basen[:trim_length - len(h)] + h | ||||
|         filename = sanitize_filename(f'{basen}.dump', restricted=True) | ||||
|         # Working around MAX_PATH limitation on Windows (see | ||||
|         # http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx) | ||||
|         if os.name == 'nt': | ||||
|             absfilepath = os.path.abspath(filename) | ||||
|             if len(absfilepath) > 259: | ||||
|                 filename = fR'\\?\{absfilepath}' | ||||
|         return filename | ||||
| 
 | ||||
|     def __decode_webpage(self, webpage_bytes, encoding, headers): | ||||
|         if not encoding: | ||||
|             encoding = self._guess_encoding_from_content(headers.get('Content-Type', ''), webpage_bytes) | ||||
| @@ -1067,7 +1049,9 @@ class InfoExtractor: | ||||
|         if self.get_param('write_pages'): | ||||
|             if isinstance(url_or_request, Request): | ||||
|                 data = self._create_request(url_or_request, data).data | ||||
|             filename = self._request_dump_filename(urlh.url, video_id, data) | ||||
|             filename = _request_dump_filename( | ||||
|                 urlh.url, video_id, data, | ||||
|                 trim_length=self.get_param('trim_file_name')) | ||||
|             self.to_screen(f'Saving request to {filename}') | ||||
|             with open(filename, 'wb') as outf: | ||||
|                 outf.write(webpage_bytes) | ||||
| @@ -1128,7 +1112,9 @@ class InfoExtractor: | ||||
|                              impersonate=None, require_impersonation=False): | ||||
|             if self.get_param('load_pages'): | ||||
|                 url_or_request = self._create_request(url_or_request, data, headers, query) | ||||
|                 filename = self._request_dump_filename(url_or_request.url, video_id, url_or_request.data) | ||||
|                 filename = _request_dump_filename( | ||||
|                     url_or_request.url, video_id, url_or_request.data, | ||||
|                     trim_length=self.get_param('trim_file_name')) | ||||
|                 self.to_screen(f'Loading request from {filename}') | ||||
|                 try: | ||||
|                     with open(filename, 'rb') as dumpf: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bashonly
					bashonly