diff --git a/playtube/media_probe.py b/playtube/media_probe.py index 4c36c2a..73458fd 100644 --- a/playtube/media_probe.py +++ b/playtube/media_probe.py @@ -15,14 +15,29 @@ MEDIA_PROBE_JS = r""" var raw = el ? el.getAttribute('src') : null; return (raw && /^https?:\/\//i.test(raw)) ? raw : null; } + // Video-ID aus der URL (?v=... Parameter) - damit laesst sich die Thumbnail-URL + // ueber YouTubes CDN immer zuverlaessig selbst bauen, unabhaengig davon, ob + // gerade ein passendes / im DOM zu finden ist (das , auf das sich der Code frueher verlassen hat, fehlt auf + // vielen aktuellen YouTube-Seiten schlicht). + function videoIdFromUrl(url) { + try { + return new URL(url).searchParams.get('v'); + } catch (e) { return null; } + } + function ytThumbnailUrl(videoId) { + return videoId ? ('https://i.ytimg.com/vi/' + videoId + '/hqdefault.jpg') : null; + } + var video = document.querySelector('video'); var isMusic = location.hostname.indexOf('music.youtube.com') !== -1; + var videoId = videoIdFromUrl(location.href); var title = null, subtitle = null, thumbnail = null; if (isMusic) { title = txt('.title.ytmusic-player-bar') || txt('ytmusic-player-bar .title'); subtitle = txt('.byline.ytmusic-player-bar') || txt('ytmusic-player-bar .byline'); - thumbnail = imgSrc('ytmusic-player-bar img, .image.ytmusic-player-bar img'); + thumbnail = imgSrc('ytmusic-player-bar img, .image.ytmusic-player-bar img') || ytThumbnailUrl(videoId); } else { var t = document.title.replace(/ - YouTube$/, ''); title = t || null; @@ -31,7 +46,7 @@ MEDIA_PROBE_JS = r""" || txt('#channel-name a') || txt('ytd-channel-name#channel-name a'); var imgY = document.querySelector('link[rel="image_src"]'); - thumbnail = imgY ? imgY.href : null; + thumbnail = (imgY ? imgY.href : null) || ytThumbnailUrl(videoId); } // WICHTIG: QtWebEngine's runJavaScript()-Bruecke liefert bei einem direkt