From a6c5bee90958dd60c3709d3b5cfc2ebc33bdeed3 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 10 May 2022 10:36:51 +0800 Subject: [PATCH] merge youtube download fix into content-fetch --- .../test/youtube-handler.test.js | 14 ++++----- packages/content-fetch/youtube-handler.js | 29 ++++++++++--------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/content-fetch/test/youtube-handler.test.js b/packages/content-fetch/test/youtube-handler.test.js index 5ba752543..d34643773 100644 --- a/packages/content-fetch/test/youtube-handler.test.js +++ b/packages/content-fetch/test/youtube-handler.test.js @@ -1,12 +1,12 @@ const { expect } = require('chai') -const { youtubeHandler } = require('../youtube-handler') +const { getYoutubeVideoId } = require('../youtube-handler') -describe('getVideoId', () => { +describe('getYoutubeVideoId', () => { it('should parse video id out of a URL', async () => { - expect('BnSUk0je6oo').to.eq(youtubeHandler.getVideoId('https://www.youtube.com/watch?v=BnSUk0je6oo&t=269s')); - expect('vFD2gu007dc').to.eq(youtubeHandler.getVideoId('https://www.youtube.com/watch?v=vFD2gu007dc&list=RDvFD2gu007dc&start_radio=1')); - expect('vFD2gu007dc').to.eq(youtubeHandler.getVideoId('https://youtu.be/vFD2gu007dc')); - expect('BMFVCnbRaV4').to.eq(youtubeHandler.getVideoId('https://youtube.com/watch?v=BMFVCnbRaV4&feature=share')); - expect('cg9b4RC87LI').to.eq(youtubeHandler.getVideoId('https://youtu.be/cg9b4RC87LI?t=116')); + 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/content-fetch/youtube-handler.js b/packages/content-fetch/youtube-handler.js index 1b2286354..e55e11c59 100644 --- a/packages/content-fetch/youtube-handler.js +++ b/packages/content-fetch/youtube-handler.js @@ -9,27 +9,30 @@ const axios = require('axios'); const YOUTUBE_URL_MATCH = /^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/ +function getYoutubeVideoId(url) { + const u = new URL(url); + const videoId = u.searchParams['v'] + if (!videoId) { + const match = url.toString().match(YOUTUBE_URL_MATCH) + if (match === null || match.length < 6 || !match[5]) { + return undefined + } + return match[5] + } + return videoId +} +exports.getYoutubeVideoId = getYoutubeVideoId + exports.youtubeHandler = { shouldPrehandle: (url, env) => { return YOUTUBE_URL_MATCH.test(url.toString()) }, - getVideoId: (url) => { - const u = new URL(url); - const videoId = u.searchParams['v'] - if (!videoId) { - const match = url.toString().match(YOUTUBE_URL_MATCH) - if (match === null || match.length < 6 || !match[5]) { - return undefined - } - return match[5] - } - return videoId - }, + prehandle: async (url, env) => { - const videoId = getVideoId(url) + const videoId = getYoutubeVideoId(url) if (!videoId) { return {} }