diff --git a/README.md b/README.md index da7073bd..70794dbc 100644 --- a/README.md +++ b/README.md @@ -687,11 +687,12 @@ https://twitter.com/wesbos/timelines/1189618481672667136 ### YouTube -The YouTube transformer (currently) only supports videos in the following -formats: +The YouTube transformer (currently) supports videos and channels in the +following formats: - Full url (`https://youtube.com/watch?v=dQw4w9WgXcQ`) - Short url (`https://youtu.be/dQw4w9WgXcQ`) +- Channel url (`https://youtube.com/user/kentdoddsfamily`) #### Usage diff --git a/src/__tests__/transformers/YouTube.js b/src/__tests__/transformers/YouTube.js index d812ff85..2cecb52a 100644 --- a/src/__tests__/transformers/YouTube.js +++ b/src/__tests__/transformers/YouTube.js @@ -67,7 +67,7 @@ cases( }, 'user full url': { url: 'https://youtube.com/user/kentdoddsfamily', - valid: false, + valid: true, }, 'user short url': { url: 'https://youtube.com/kentdoddsfamily', @@ -175,7 +175,7 @@ test('Plugin can transform YouTube links', async () => { - + " diff --git a/src/transformers/YouTube.js b/src/transformers/YouTube.js index b7c158fe..8fdd9a50 100644 --- a/src/transformers/YouTube.js +++ b/src/transformers/YouTube.js @@ -4,8 +4,8 @@ export const shouldTransform = (url) => { return ( host === 'youtu.be' || (['youtube.com', 'www.youtube.com'].includes(host) && - pathname.includes('/watch') && - Boolean(searchParams.get('v'))) + ((pathname.includes('/watch') && Boolean(searchParams.get('v'))) || + pathname.includes('/user/'))) ); }; @@ -24,6 +24,13 @@ export const getTimeValueInSeconds = (timeValue) => { }; export const getYouTubeIFrameSrc = (urlString) => { const url = new URL(urlString); + if (urlString.includes('/user/')) { + const channelID = urlString.split('/user/')[1]; + const channelEmbed = + 'https://www.youtube.com/embed?listType=user_uploads&list='; + return channelEmbed + channelID; + } + let id = url.searchParams.get('v'); if (url.host === 'youtu.be') { id = url.pathname.slice(1);