diff --git a/backend/novasonic-server.js b/backend/novasonic-server.js index 2a20fc2..0464440 100644 --- a/backend/novasonic-server.js +++ b/backend/novasonic-server.js @@ -67,39 +67,65 @@ function parseSpotifyUrl(url) { return { type: m[1], id: m[2] }; } -async function fetchSpotifyEmbed(type, id) { - const r = await fetch(`https://open.spotify.com/embed/${type}/${id}`, { +let _spTokenCache = null; +let _spTokenExpiry = 0; + +async function fetchSpotifyToken() { + if (_spTokenCache && Date.now() < _spTokenExpiry) return _spTokenCache; + const r = await fetch('https://open.spotify.com/get_access_token?reason=transport&productType=web_player', { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', - Accept: 'text/html,application/xhtml+xml', - 'Accept-Language': 'en-US,en;q=0.9', + 'Accept': 'application/json', }, - signal: AbortSignal.timeout(12000), + signal: AbortSignal.timeout(10000), }); - if (!r.ok) throw new Error(`Spotify-Embed nicht erreichbar (${r.status})`); - const html = await r.text(); - const m = html.match(/