Fix playlist thumbnails — extract from yt-dlp thumbnails array
_stable_thumbnail expects a video ID but was being passed a playlist ID (PLxxx), producing a broken URL. Now picks the best thumbnail from yt-dlp's thumbnails array, falling back to the singular thumbnail field. Also backfills playlist.thumbnail_url from the first video when indexing a playlist that still has no thumbnail. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -378,11 +378,20 @@ def fetch_channel_playlists(channel_id: str, max_results: int = 100) -> list[dic
|
||||
title = info.get("title") or info.get("playlist_title") or ""
|
||||
if not pl_id or not title or pl_id == channel_id:
|
||||
continue
|
||||
# Thumbnail: yt-dlp gives a thumbnails array for playlist entries;
|
||||
# fall back to singular thumbnail field. Never use _stable_thumbnail
|
||||
# here because the id is a playlist ID, not a video ID.
|
||||
thumbs = info.get("thumbnails") or []
|
||||
thumb_url = info.get("thumbnail")
|
||||
if thumbs:
|
||||
best = max(thumbs, key=lambda t: (t.get("width") or 0) * (t.get("height") or 0), default=None)
|
||||
if best:
|
||||
thumb_url = best.get("url") or thumb_url
|
||||
playlists.append({
|
||||
"youtube_playlist_id": pl_id,
|
||||
"title": title,
|
||||
"description": info.get("description"),
|
||||
"thumbnail_url": _stable_thumbnail(info.get("id")) if info.get("_type") == "url" else None,
|
||||
"thumbnail_url": thumb_url,
|
||||
"video_count": info.get("playlist_count") or info.get("n_entries") or 0,
|
||||
})
|
||||
except json.JSONDecodeError:
|
||||
|
||||
Reference in New Issue
Block a user