updating to use invidious for some stuff instead of piped

This commit is contained in:
localhost 2023-08-01 10:55:52 +02:00
parent 3302de2430
commit e023b92c28
3 changed files with 17 additions and 34 deletions

View File

@ -79,9 +79,9 @@ exports.getChannel = async (req, res) => {
allVideos.sort((a, b) => new Date(b.published) - new Date(a.published)) allVideos.sort((a, b) => new Date(b.published) - new Date(a.published))
res.json({ res.json({
name: channel.name, name: channel.author,
avatar: channel.avatarUrl, avatar: channel.authorThumbnails[1].url,
verified: channel.verified, verified: channel.authorVerified,
videos: allVideos videos: allVideos
}) })
} }

View File

@ -1,37 +1,18 @@
const fetch = require('node-fetch') const fetch = require('node-fetch')
async function getInstance() { async function getInstance() {
const instances = [ return 'https://invidious.lain.la'
'https://pipedapi.kavin.rocks',
'https://pipedapi-libre.kavin.rocks',
'https://piped-api.privacy.com.de',
'https://api.piped.projectsegfau.lt',
'https://pipedapi.in.projectsegfau.lt',
'https://pipedapi.us.projectsegfau.lt',
'https://watchapi.whatever.social',
'https://api.piped.privacydev.net',
'https://pipedapi.palveluntarjoaja.eu',
'https://pipedapi.smnz.de',
'https://pipedapi.adminforge.de',
'https://pipedapi.qdi.fi',
'https://piped-api.hostux.net',
'https://api.piped.yt',
'https://pipedapi.osphost.fi',
'https://pipedapi.simpleprivacy.fr'
]
return instances[Math.floor(Math.random() * instances.length)]
} }
async function getVideoMetadata(id) { async function getVideoMetadata(id) {
const instance = await getInstance() const instance = await getInstance()
const json = await (await fetch(`${instance}/streams/${id}`)).json() const json = await (await fetch(`${instance}/api/v1/videos/${id}?fields=videoId,title,descriptionHtml,videoThumbnails,published,authorId,error&pretty=1`)).json()
return json return json
} }
async function getChannel(id) { async function getChannel(id) {
const instance = await getInstance() const instance = await getInstance()
const json = await (await fetch(`${instance}/channel/${id}`)).json() const json = await (await fetch(`${instance}/api/v1/channels/${id}?pretty=1`)).json()
return json return json
} }
@ -39,7 +20,7 @@ async function getChannelVideos(id) {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
try { try {
const videos = [] const videos = []
const instance = await getInstance() const instance = 'https://pipedapi.kavin.rocks'
const json = await (await fetch(`${instance}/channel/${id}`)).json() const json = await (await fetch(`${instance}/channel/${id}`)).json()
videos.push(...json.relatedStreams) videos.push(...json.relatedStreams)
if (json.nextpage) await getNextPage(json.nextpage) if (json.nextpage) await getNextPage(json.nextpage)
@ -61,7 +42,7 @@ async function getChannelVideos(id) {
} }
async function getPlaylistVideos(id) { async function getPlaylistVideos(id) {
const instance = await getInstance() const instance ='https://pipedapi.kavin.rocks'
const json = await (await fetch(`${instance}/playlists/${id}`)).json() const json = await (await fetch(`${instance}/playlists/${id}`)).json()
return json return json
} }

View File

@ -6,22 +6,24 @@ const upload = require('./upload.js')
async function createDatabaseVideo(id, videoUrl, playlistId) { async function createDatabaseVideo(id, videoUrl, playlistId) {
const data = await metadata.getVideoMetadata(id) const data = await metadata.getVideoMetadata(id)
const uploaderAvatar = await upload.uploadImage((data.uploaderUrl).replace('/channel/', ''), data.uploaderAvatar) const channelData = await metadata.getChannel(data.authorId)
const thumbnailUrl = await upload.uploadImage(id, data.thumbnailUrl)
const uploaderAvatar = await upload.uploadImage(data.authorId, channelData.authorThumbnails[1].url)
const thumbnailUrl = await upload.uploadImage(id, data.videoThumbnails.find(o => o.quality == 'maxresdefault').url)
await prisma.videos.create({ await prisma.videos.create({
data: { data: {
id: id, id: id,
title: data.title, title: data.title,
description: data.description, description: (data.descriptionHtml).replaceAll('\n', '<br>'),
thumbnail: thumbnailUrl, thumbnail: thumbnailUrl,
source: videoUrl, source: videoUrl,
published: data.uploadDate, published: (new Date(data.published*1000)).toISOString().slice(0,10),
archived: (new Date()).toISOString().slice(0,10), archived: (new Date()).toISOString().slice(0,10),
channel: data.uploader, channel: channelData.author,
channelId: (data.uploaderUrl).replace('/channel/', ''), channelId: channelData.authorId,
channelAvatar: uploaderAvatar, channelAvatar: uploaderAvatar,
channelVerified: data.uploaderVerified, channelVerified: channelData.authorVerified,
playlist: playlistId playlist: playlistId
} }
}) })