UNPKG

yt-stream

Version:

Create easily readable streams from YouTube video url's

40 lines (30 loc) 1.48 kB
const { validateURL, validateID, validatePlaylistID } = require('./validate.js'); const _getURL = require('./request/url.js'); function getID(ytstream, url){ if(typeof url !== 'string') throw new Error(`URL is not a string`); if(!validateURL(ytstream, url)) return undefined; const parsed = _getURL(url); const host = parsed.hostname.toLowerCase().split('www.').join(''); let ytid; if(host === `youtu.be`) ytid = parsed.pathname.split('/').join(''); else if(host === `youtube.com` || host === 'music.youtube.com'){ if(parsed.pathname.startsWith('/watch')) ytid = parsed.searchParams.get('v') || null; else if(parsed.pathname.startsWith('/embed/')) ytid = parsed.pathname.split('/embed/').join(''); else if(parsed.pathname.startsWith('/v/')) ytid = parsed.pathname.split('/v/').join(''); else if(parsed.pathname.startsWith('/shorts/')) ytid = parsed.pathname.split('/shorts/').join(''); else if(parsed.pathname.startsWith('/playlist')) ytid = parsed.searchParams.get('list') || null; else ytid = null } else ytid = null; if(validateID(ytstream, ytid) || validatePlaylistID(ytstream, ytid)) return ytid; else return undefined; } function getURL(ytstream, id){ if(typeof id !== 'string') throw new Error(`ID is not a string`); let reg = /^[A-Za-z0-9_-]*$/; if(!reg.test(id)) return undefined; return `https://www.youtube.com/watch?v=${id}`; } module.exports ={ getID, getURL }