Added two hooks that are provided via info_dict from extractor under keys '_fragment_hook_before_dl' and '_fragment_hook_after_dl' that run before and after fragment is downloaded.

This commit is contained in:
JSubelj 2023-09-22 13:49:23 +02:00
parent 9d6254069c
commit dc3c1f4a56
2 changed files with 19 additions and 0 deletions

View File

@ -121,12 +121,21 @@ def _download_fragment(self, ctx, frag_url, info_dict, headers=None, request_dat
frag_resume_len = self.filesize_or_none(self.temp_name(fragment_filename)) frag_resume_len = self.filesize_or_none(self.temp_name(fragment_filename))
fragment_info_dict['frag_resume_len'] = ctx['frag_resume_len'] = frag_resume_len fragment_info_dict['frag_resume_len'] = ctx['frag_resume_len'] = frag_resume_len
execute_before_frag_dl = info_dict.get('_fragment_hook_before_dl')
if execute_before_frag_dl is not None and callable(execute_before_frag_dl):
execute_before_frag_dl(fragment_filename, fragment_info_dict, ctx)
success, _ = ctx['dl'].download(fragment_filename, fragment_info_dict) success, _ = ctx['dl'].download(fragment_filename, fragment_info_dict)
if not success: if not success:
return False return False
if fragment_info_dict.get('filetime'): if fragment_info_dict.get('filetime'):
ctx['fragment_filetime'] = fragment_info_dict.get('filetime') ctx['fragment_filetime'] = fragment_info_dict.get('filetime')
ctx['fragment_filename_sanitized'] = fragment_filename ctx['fragment_filename_sanitized'] = fragment_filename
execute_after_frag_dl = info_dict.get('_fragment_hook_after_dl')
if execute_after_frag_dl is not None and callable(execute_after_frag_dl):
execute_after_frag_dl(fragment_filename, fragment_info_dict, ctx)
return True return True
def _read_fragment(self, ctx): def _read_fragment(self, ctx):

View File

@ -389,6 +389,16 @@ class InfoExtractor:
extracted will not be available to output template and extracted will not be available to output template and
match_filter. So, only "comments" and "comment_count" are match_filter. So, only "comments" and "comment_count" are
currently allowed to be extracted via this method. currently allowed to be extracted via this method.
_fragment_hook_before_dl: A function to be called just before fragment is
downloaded. It should take three positional arguments:
'fragment_filename', 'fragment_info_dict' and 'ctx'.
This is useful for special sites that need to change
access cookies on every fragment/every few seconds.
_fragment_hook_after_dl: A function to be called right after fragment is
downloaded. It should take three positional arguments:
'fragment_filename', 'fragment_info_dict' and 'ctx'.
This is useful for special sites that need to change
access cookies on every fragment/every few seconds.
The following fields should only be used when the video belongs to some logical The following fields should only be used when the video belongs to some logical
chapter or section: chapter or section: