From 31eb1a0f61aa075159dea91ed898b971f78aecda Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 9 May 2022 11:03:17 -0700 Subject: [PATCH 1/2] Fix parsing video IDs from youtube URLs --- packages/puppeteer-parse/youtube-handler.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) 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 {} } From 1f0abbaa3045cd33b1ea322fa3b6b992966baad1 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 9 May 2022 11:11:13 -0700 Subject: [PATCH 2/2] Add tests --- .../puppeteer-parse/test/youtube-handler.test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/puppeteer-parse/test/youtube-handler.test.js 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')); + }) +})