Files
chatGPTBox/src/content-script/site-adapters/youtube/index.mjs
T
Alwin Raju 88522acbcb Changed youtube summary prompt for better formatting
Changed the youtube summary prompt for better formatting by outputting the answer in markdown. Now it includes the title, summary and key takeaways as bullet points and titles.
2023-05-19 08:52:15 +08:00

64 lines
2.2 KiB
JavaScript

import { cropText } from '../../../utils'
import { config } from '../index.mjs'
// This function was written by ChatGPT and modified by iamsirsammy
function replaceHtmlEntities(htmlString) {
const doc = new DOMParser().parseFromString(htmlString.replaceAll('&', '&'), 'text/html')
return doc.documentElement.innerText
}
export default {
init: async (hostname, userConfig, getInput, mountComponent) => {
try {
let oldUrl = location.href
const checkUrlChange = async () => {
if (location.href !== oldUrl) {
oldUrl = location.href
mountComponent(config.youtube, userConfig)
}
}
window.setInterval(checkUrlChange, 500)
} catch (e) {
/* empty */
}
},
inputQuery: async () => {
try {
const docText = await (
await fetch(location.href, {
credentials: 'include',
})
).text()
const subtitleUrlStartAt = docText.indexOf('https://www.youtube.com/api/timedtext')
if (subtitleUrlStartAt === -1) return
let subtitleUrl = docText.substring(subtitleUrlStartAt)
subtitleUrl = subtitleUrl.substring(0, subtitleUrl.indexOf('"'))
subtitleUrl = subtitleUrl.replaceAll('\\u0026', '&')
let title = docText.substring(docText.indexOf('"title":"') + '"title":"'.length)
title = title.substring(0, title.indexOf('","'))
const subtitleResponse = await fetch(subtitleUrl)
if (!subtitleResponse.ok) return
let subtitleData = await subtitleResponse.text()
let subtitleContent = ''
while (subtitleData.indexOf('">') !== -1) {
subtitleData = subtitleData.substring(subtitleData.indexOf('">') + 2)
subtitleContent += subtitleData.substring(0, subtitleData.indexOf('<')) + ','
}
subtitleContent = replaceHtmlEntities(subtitleContent)
return cropText(
`Provide a structured summary of the following video in markdown format, focusing on key takeaways and crucial information, and ensuring to include the video title. The summary should be easy to read and concise, yet comprehensive.` +
`The video title is "${title}". The subtitle content is as follows:\n${subtitleContent}`,
)
} catch (e) {
console.log(e)
}
},
}