mirror of
https://github.com/wassname/chatGPTBox.git
synced 2026-08-15 12:15:37 +08:00
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.
64 lines
2.2 KiB
JavaScript
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)
|
|
}
|
|
},
|
|
}
|