diff --git a/src/index.js b/src/index.js index f69e7d9..2999335 100644 --- a/src/index.js +++ b/src/index.js @@ -2,19 +2,23 @@ import he from 'he'; import axios from 'axios'; -import { find } from 'lodash'; -// import striptags from 'striptags'; +import { + find +} from 'lodash'; +import striptags from 'striptags'; export async function getSubtitles({ videoID, lang = 'en', }: { - videoID: string, - lang: 'en', -}) { - const { data } = await axios.get( - `https://youtube.com/get_video_info?video_id=${videoID}` - ); + videoID: string, + lang: 'en', + }) { + const { + data + } = await axios.get( + `https://youtube.com/get_video_info?video_id=${videoID}` + ); const decodedData = decodeURIComponent(data); @@ -24,17 +28,25 @@ export async function getSubtitles({ const regex = /({"captionTracks":.*isTranslatable":(true|false)}])/; const [match] = regex.exec(decodedData); - const { captionTracks } = JSON.parse(`${match}}`); + const { + captionTracks + } = JSON.parse(`${match}}`); const subtitle = - find(captionTracks, { vssId: `.${lang}` }) || - find(captionTracks, { vssId: `a.${lang}` }); + find(captionTracks, { + vssId: `.${lang}` + }) || + find(captionTracks, { + vssId: `a.${lang}` + }); // * ensure we have found the correct subtitle lang if (!subtitle || (subtitle && !subtitle.baseUrl)) throw new Error(`Could not find ${lang} captions for ${videoID}`); - const { data: transcript } = await axios.get(subtitle.baseUrl); + const { + data: transcript + } = await axios.get(subtitle.baseUrl); const lines = transcript .replace('', '') .replace('', '') @@ -44,21 +56,22 @@ export async function getSubtitles({ const startRegex = /start="([\d.]+)"/; const durRegex = /dur="([\d.]+)"/; - const fontTag = new RegExp('<'+'font'+'[^><]*>|<.'+'font'+'[^><]*>','g'); const [, start] = startRegex.exec(line); const [, dur] = durRegex.exec(line); const htmlText = line .replace(//, '') .replace(/&/gi, '&') - .replace(/<\/?[^>]+(>|$)/g, '') - .replace(fontTag, ''); + .replace(/<\/?[^>]+(>|$)/g, ''); - // const strippedText = striptags(htmlText); + const decodedText = he.decode(htmlText); + const text = striptags(decodedText); - const text = he.decode(htmlText); - - return { start, dur, text }; + return { + start, + dur, + text + }; }); return lines; diff --git a/yarn.lock b/yarn.lock index 79ef750..436a988 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2956,6 +2956,10 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +striptags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.1.0.tgz#763e534338d9cf542f004a4b1eb099e32d295e44" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"