mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-12-12 03:05:20 +00:00
[extractor] Support multiple archive ids for one video (#4307)
Closes #4352
This commit is contained in:
@@ -3455,11 +3455,9 @@ class YoutubeDL:
|
||||
if fn is None:
|
||||
return False
|
||||
|
||||
vid_id = self._make_archive_id(info_dict)
|
||||
if not vid_id:
|
||||
return False # Incomplete video information
|
||||
|
||||
return vid_id in self.archive
|
||||
vid_ids = [self._make_archive_id(info_dict)]
|
||||
vid_ids.extend(info_dict.get('_old_archive_ids', []))
|
||||
return any(id_ in self.archive for id_ in vid_ids)
|
||||
|
||||
def record_download_archive(self, info_dict):
|
||||
fn = self.params.get('download_archive')
|
||||
|
||||
@@ -334,6 +334,7 @@ class InfoExtractor:
|
||||
'private', 'premium_only', 'subscriber_only', 'needs_auth',
|
||||
'unlisted' or 'public'. Use 'InfoExtractor._availability'
|
||||
to set it
|
||||
_old_archive_ids: A list of old archive ids needed for backward compatibility
|
||||
__post_extractor: A function to be called just before the metadata is
|
||||
written to either disk, logger or console. The function
|
||||
must return a dict which will be added to the info_dict.
|
||||
|
||||
@@ -249,7 +249,8 @@ class FunimationIE(FunimationBaseIE):
|
||||
self._sort_formats(formats, ('lang', 'source'))
|
||||
|
||||
return {
|
||||
'id': initial_experience_id if only_initial_experience else episode_id,
|
||||
'id': episode_id,
|
||||
'_old_archive_ids': [initial_experience_id],
|
||||
'display_id': display_id,
|
||||
'duration': duration,
|
||||
'title': episode['episodeTitle'],
|
||||
|
||||
@@ -22,6 +22,9 @@ class HTML5MediaEmbedIE(InfoExtractor):
|
||||
entry.update({
|
||||
'id': f'{video_id}-{num}',
|
||||
'title': f'{title} ({num})',
|
||||
'_old_archive_ids': [
|
||||
f'Generic {f"{video_id}-{num}" if len(entries) > 1 else video_id}',
|
||||
],
|
||||
})
|
||||
self._sort_formats(entry['formats'])
|
||||
yield entry
|
||||
|
||||
@@ -1162,8 +1162,11 @@ class TwitchClipsIE(TwitchBaseIE):
|
||||
})
|
||||
thumbnails.append(thumb)
|
||||
|
||||
old_id = self._search_regex(r'%7C(\d+)(?:-\d+)?.mp4', formats[-1]['url'], 'old id', default=None)
|
||||
|
||||
return {
|
||||
'id': clip.get('id') or video_id,
|
||||
'_old_archive_ids': [f'{self.ie_key()} {old_id}'] if old_id else None,
|
||||
'display_id': video_id,
|
||||
'title': clip.get('title') or video_id,
|
||||
'formats': formats,
|
||||
|
||||
Reference in New Issue
Block a user