diff --git a/packages/puppeteer-parse/test/youtube-handler.test.js b/packages/puppeteer-parse/test/youtube-handler.test.js new file mode 100644 index 000000000..d34643773 --- /dev/null +++ b/packages/puppeteer-parse/test/youtube-handler.test.js @@ -0,0 +1,12 @@ +const { expect } = require('chai') +const { getYoutubeVideoId } = require('../youtube-handler') + +describe('getYoutubeVideoId', () => { + it('should parse video id out of a URL', async () => { + expect('BnSUk0je6oo').to.eq(getYoutubeVideoId('https://www.youtube.com/watch?v=BnSUk0je6oo&t=269s')); + expect('vFD2gu007dc').to.eq(getYoutubeVideoId('https://www.youtube.com/watch?v=vFD2gu007dc&list=RDvFD2gu007dc&start_radio=1')); + expect('vFD2gu007dc').to.eq(getYoutubeVideoId('https://youtu.be/vFD2gu007dc')); + expect('BMFVCnbRaV4').to.eq(getYoutubeVideoId('https://youtube.com/watch?v=BMFVCnbRaV4&feature=share')); + expect('cg9b4RC87LI').to.eq(getYoutubeVideoId('https://youtu.be/cg9b4RC87LI?t=116')); + }) +}) diff --git a/packages/puppeteer-parse/youtube-handler.js b/packages/puppeteer-parse/youtube-handler.js index 1b2286354..796bea5db 100644 --- a/packages/puppeteer-parse/youtube-handler.js +++ b/packages/puppeteer-parse/youtube-handler.js @@ -9,13 +9,7 @@ const axios = require('axios'); const YOUTUBE_URL_MATCH = /^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/ -exports.youtubeHandler = { - - shouldPrehandle: (url, env) => { - return YOUTUBE_URL_MATCH.test(url.toString()) - }, - - getVideoId: (url) => { +function getYoutubeVideoId(url) { const u = new URL(url); const videoId = u.searchParams['v'] if (!videoId) { @@ -26,10 +20,19 @@ exports.youtubeHandler = { return match[5] } return videoId + } +exports.getYoutubeVideoId = getYoutubeVideoId + +exports.youtubeHandler = { + + shouldPrehandle: (url, env) => { + return YOUTUBE_URL_MATCH.test(url.toString()) }, + + prehandle: async (url, env) => { - const videoId = getVideoId(url) + const videoId = getYoutubeVideoId(url) if (!videoId) { return {} }