mirror of https://github.com/preservetube/auto.git
better metadata server support
This commit is contained in:
parent
389fdf49c4
commit
7791f92a56
7
bun.lock
7
bun.lock
|
|
@ -8,7 +8,6 @@
|
||||||
"@types/pg": "^8.20.0",
|
"@types/pg": "^8.20.0",
|
||||||
"kysely": "^0.28.16",
|
"kysely": "^0.28.16",
|
||||||
"pg": "^8.20.0",
|
"pg": "^8.20.0",
|
||||||
"youtubei.js": "^17.0.1",
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bun": "latest",
|
"@types/bun": "latest",
|
||||||
|
|
@ -19,8 +18,6 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"packages": {
|
"packages": {
|
||||||
"@bufbuild/protobuf": ["@bufbuild/protobuf@2.12.0", "", {}, "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA=="],
|
|
||||||
|
|
||||||
"@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="],
|
"@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="],
|
||||||
|
|
||||||
"@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="],
|
"@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="],
|
||||||
|
|
@ -31,8 +28,6 @@
|
||||||
|
|
||||||
"kysely": ["kysely@0.28.16", "", {}, "sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww=="],
|
"kysely": ["kysely@0.28.16", "", {}, "sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww=="],
|
||||||
|
|
||||||
"meriyah": ["meriyah@6.1.4", "", {}, "sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ=="],
|
|
||||||
|
|
||||||
"pg": ["pg@8.20.0", "", { "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA=="],
|
"pg": ["pg@8.20.0", "", { "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA=="],
|
||||||
|
|
||||||
"pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="],
|
"pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="],
|
||||||
|
|
@ -64,7 +59,5 @@
|
||||||
"undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
|
"undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
|
||||||
|
|
||||||
"xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="],
|
"xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="],
|
||||||
|
|
||||||
"youtubei.js": ["youtubei.js@17.0.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0", "meriyah": "^6.1.4" } }, "sha512-1lO4b8UqMDzE0oh2qEGzbBOd4UYRdxn/4PdpRM7BGTHxM6ddsEsKZTu90jp8V9FHVgC2h1UirQyqoqLiKwl+Zg=="],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/pg": "^8.20.0",
|
"@types/pg": "^8.20.0",
|
||||||
"kysely": "^0.28.16",
|
"kysely": "^0.28.16",
|
||||||
"pg": "^8.20.0",
|
"pg": "^8.20.0"
|
||||||
"youtubei.js": "^17.0.1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
14
src/index.ts
14
src/index.ts
|
|
@ -1,6 +1,7 @@
|
||||||
import { Innertube } from 'youtubei.js'
|
import { Innertube } from 'youtubei.js'
|
||||||
import healthStatus from '@/utils/health';
|
import healthStatus from '@/utils/health';
|
||||||
import { db } from '@/utils/database'
|
import { db } from '@/utils/database'
|
||||||
|
import { getChannelVideos } from './utils/metadata';
|
||||||
|
|
||||||
let websocket = process.env.WEBSOCKET
|
let websocket = process.env.WEBSOCKET
|
||||||
if (healthStatus[process.env.METADATA!] != 'healthy') {
|
if (healthStatus[process.env.METADATA!] != 'healthy') {
|
||||||
|
|
@ -14,23 +15,22 @@ const channels = await db.selectFrom('autodownload')
|
||||||
|
|
||||||
for (const c of channels) {
|
for (const c of channels) {
|
||||||
console.log(c.channel)
|
console.log(c.channel)
|
||||||
const channel = await yt.getChannel(c.channel);
|
const videos = await getChannelVideos(c.channel)
|
||||||
const json = await channel.getVideos();
|
|
||||||
|
|
||||||
for (const v of json.videos) {
|
for (const v of videos) {
|
||||||
console.log(v.video_id)
|
console.log(v.videoId)
|
||||||
const already = await db.selectFrom('videos')
|
const already = await db.selectFrom('videos')
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where('id', '=', v.video_id)
|
.where('id', '=', v.videoId)
|
||||||
.executeTakeFirst()
|
.executeTakeFirst()
|
||||||
|
|
||||||
if (already) continue
|
if (already) continue
|
||||||
|
|
||||||
await new Promise(async (resolve, reject) => {
|
await new Promise(async (resolve, reject) => {
|
||||||
const ws = new WebSocket(`${websocket}/save?url=http://www.youtube.com/watch?v=${v.video_id}&bKey=${process.env.bKey}`)
|
const ws = new WebSocket(`${websocket}/save?url=http://www.youtube.com/watch?v=${v.videoId}&bKey=${process.env.bKey}`)
|
||||||
|
|
||||||
ws.onopen = () => {
|
ws.onopen = () => {
|
||||||
console.log(`opened websocket for ${v.video_id}`)
|
console.log(`opened websocket for ${v.videoId}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
ws.onmessage = (event) => {
|
ws.onmessage = (event) => {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
// metadata either returns innertube or { error: string }
|
||||||
|
import { getMetadataBackend } from '@/utils/health';
|
||||||
|
|
||||||
|
async function getVideo(id: string) {
|
||||||
|
return await (await fetch(`${getMetadataBackend()}/video/${id}`)).json()
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getChannel(id: string) {
|
||||||
|
return await (await fetch(`${getMetadataBackend()}/channel/${id}`)).json()
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getChannelVideos(id: string) {
|
||||||
|
return await (await fetch(`${getMetadataBackend()}/videos/${id}`)).json()
|
||||||
|
}
|
||||||
|
|
||||||
|
export { getVideo, getChannel, getChannelVideos }
|
||||||
Loading…
Reference in New Issue