Changeset fef781e in Klonkt for src/routes/audio.js
- Timestamp:
- 06/20/2026 04:46:35 AM (3 months ago)
- Branches:
- main
- Children:
- 0d7acdf
- Parents:
- 8ab20b6
- File:
-
- 1 edited
-
src/routes/audio.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/audio.js
r8ab20b6 rfef781e 158 158 }); 159 159 160 // Same-origin proxy voor de YouTube-titel (oEmbed). YouTube's oEmbed stuurt geen161 // CORS-header, dus de browser kan 'm niet direct fetchen — wij halen 'm server-162 // side op (geen CORS) en cachen 't. Gebruikt door de audio-only YT-embed om de163 // echte videotitel te tonen i.p.v. "YouTube".164 const ytTitleCache = new Map();165 router.get('/yt-title', async (req, res) => {166 const url = String(req.query.url || '');167 if (!/^https:\/\/(www\.)?(youtube\.com|youtu\.be|youtube-nocookie\.com)\//i.test(url)) {168 return res.status(400).json({ error: 'bad url' });169 }170 if (ytTitleCache.has(url)) return res.json({ title: ytTitleCache.get(url) });171 try {172 const ac = new AbortController();173 const timer = setTimeout(() => ac.abort(), 6000);174 const r = await fetch('https://www.youtube.com/oembed?format=json&url=' + encodeURIComponent(url), { signal: ac.signal });175 clearTimeout(timer);176 if (!r.ok) { ytTitleCache.set(url, ''); return res.json({ title: '' }); }177 const d = await r.json();178 const title = (d && d.title) ? String(d.title).slice(0, 200) : '';179 ytTitleCache.set(url, title);180 res.json({ title });181 } catch (e) {182 res.status(502).json({ error: 'fetch failed' });183 }184 });185 186 160 export default router;
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)