mirror of
https://codeberg.org/ashley/poke
synced 2025-06-03 04:59:41 +00:00
Update src/libpoketube/init/pages-api.js
This commit is contained in:
parent
4b33b38e1f
commit
4acf840d80
@ -33,32 +33,36 @@ const innertube = require("../libpoketube-youtubei-objects.json");
|
|||||||
const { execSync } = require('child_process');
|
const { execSync } = require('child_process');
|
||||||
|
|
||||||
const verfull = "v24.1906-sho-MAJOR_UPDATE-stable-dev-nonLTS-git-MTcxODc5NDY3NQ==";
|
const verfull = "v24.1906-sho-MAJOR_UPDATE-stable-dev-nonLTS-git-MTcxODc5NDY3NQ==";
|
||||||
const versmol = "v24.1906-sho"
|
const versmol = "v24.1906-sho";
|
||||||
const branch = "dev/master";
|
const branch = "dev/master";
|
||||||
const codename = "sho";
|
const codename = "sho";
|
||||||
const versionnumber = "293";
|
const versionnumber = "293";
|
||||||
const relaseunixdate = "MTcxODc5NDY3NQ=="
|
const relaseunixdate = "MTcxODc5NDY3NQ==";
|
||||||
const updatequote = "pls fund vennie plush -Bims"
|
const updatequote = "pls fund vennie plush -Bims";
|
||||||
|
|
||||||
|
|
||||||
module.exports = function (app, config, renderTemplate) {
|
module.exports = function (app, config, renderTemplate) {
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
'User-Agent': config.useragent, // Set User-Agent from config
|
||||||
|
};
|
||||||
|
|
||||||
app.get("/vi/:v/:t", async function (req, res) {
|
app.get("/vi/:v/:t", async function (req, res) {
|
||||||
var url = `https://i.ytimg.com/vi/${req.params.v}/${req.params.t}`
|
var url = `https://i.ytimg.com/vi/${req.params.v}/${req.params.t}`;
|
||||||
|
|
||||||
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
});
|
});
|
||||||
|
|
||||||
f.body.pipe(res);
|
f.body.pipe(res);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/avatars/:v", async function (req, res) {
|
app.get("/avatars/:v", async function (req, res) {
|
||||||
var url = `https://vid.puffyan.us/ggpht/${req.params.v}`;
|
var url = `https://vid.puffyan.us/ggpht/${req.params.v}`;
|
||||||
|
|
||||||
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
});
|
});
|
||||||
|
|
||||||
f.body.pipe(res);
|
f.body.pipe(res);
|
||||||
@ -69,31 +73,22 @@ app.get("/avatars/:v", async function (req, res) {
|
|||||||
|
|
||||||
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
});
|
});
|
||||||
|
|
||||||
f.body.pipe(res);
|
f.body.pipe(res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
app.get("/avatars/ytc/:v", async function (req, res) {
|
app.get("/avatars/ytc/:v", async function (req, res) {
|
||||||
var url = `https://vid.puffyan.us/ggpht/ytc/${req.params.v.replace("ytc", "")}`;
|
var url = `https://vid.puffyan.us/ggpht/ytc/${req.params.v.replace("ytc", "")}`;
|
||||||
|
|
||||||
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
});
|
});
|
||||||
|
|
||||||
f.body.pipe(res);
|
f.body.pipe(res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
app.get("/api/search", async (req, res) => {
|
|
||||||
const query = req.query.query;
|
|
||||||
|
|
||||||
if (!query) {
|
|
||||||
return res.redirect("/");
|
|
||||||
}
|
|
||||||
return res.redirect(`/search?query=${query}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/api/video/download", async function (req, res) {
|
app.get("/api/video/download", async function (req, res) {
|
||||||
var v = req.query.v;
|
var v = req.query.v;
|
||||||
@ -108,163 +103,126 @@ app.get("/avatars/:v", async function (req, res) {
|
|||||||
|
|
||||||
app.get("/api/subtitles", async (req, res) => {
|
app.get("/api/subtitles", async (req, res) => {
|
||||||
const { fetch } = await import("undici");
|
const { fetch } = await import("undici");
|
||||||
|
|
||||||
const id = req.query.v;
|
const id = req.query.v;
|
||||||
const l = req.query.h;
|
const l = req.query.h;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let url = `https://eu-proxy.poketube.fun/api/v1/captions/${id}?label=${l}`;
|
let url = `https://eu-proxy.poketube.fun/api/v1/captions/${id}?label=${l}`;
|
||||||
|
|
||||||
let f = await fetch(url);
|
let f = await fetch(url, {
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
|
});
|
||||||
|
|
||||||
const body = await f.text();
|
const body = await f.text();
|
||||||
|
|
||||||
res.send(body);
|
res.send(body);
|
||||||
} catch {}
|
} catch {}
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/api/getEngagementData", async (req, res) => {
|
|
||||||
const { fetch } = await import("undici");
|
|
||||||
|
|
||||||
const id = req.query.v;
|
app.get("/api/getEngagementData", async (req, res) => {
|
||||||
|
|
||||||
try {
|
|
||||||
if (id) {
|
|
||||||
const apiUrl = `https://ryd-proxy.kavin.rocks/votes/${id}&hash=d0550b6e28c8f93533a569c314d5b4e2`;
|
|
||||||
|
|
||||||
const response = await fetch(apiUrl);
|
|
||||||
|
|
||||||
if (response.status === 400) {
|
|
||||||
const error = await response.json();
|
|
||||||
return res.status(400).send(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
const engagement = await response.json();
|
|
||||||
|
|
||||||
const likes = parseInt(engagement.likes) || 0;
|
|
||||||
const dislikes = parseInt(engagement.dislikes) || 0;
|
|
||||||
const total = likes + dislikes;
|
|
||||||
|
|
||||||
const likePercentage = total > 0 ? ((likes / total) * 100).toFixed(2) : 0;
|
|
||||||
const dislikePercentage = total > 0 ? ((dislikes / total) * 100).toFixed(2) : 0;
|
|
||||||
|
|
||||||
const getLikePercentageColor = (percentage) => {
|
|
||||||
if (percentage >= 80) {
|
|
||||||
return "green";
|
|
||||||
} else if (percentage >= 50) {
|
|
||||||
return "orange";
|
|
||||||
} else {
|
|
||||||
return "red";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const getDislikePercentageColor = (percentage) => {
|
|
||||||
if (percentage >= 50) {
|
|
||||||
return "red";
|
|
||||||
} else if (percentage >= 20) {
|
|
||||||
return "orange";
|
|
||||||
} else {
|
|
||||||
return "green";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const likeColor = getLikePercentageColor(likePercentage);
|
|
||||||
const dislikeColor = getDislikePercentageColor(dislikePercentage);
|
|
||||||
|
|
||||||
const userScore = (
|
|
||||||
parseFloat(likePercentage) -
|
|
||||||
parseFloat(dislikePercentage) / 2
|
|
||||||
).toFixed(2);
|
|
||||||
|
|
||||||
const getUserScoreLabel = (score) => {
|
|
||||||
if (score >= 98) {
|
|
||||||
return "Masterpiece Video";
|
|
||||||
} else if (score >= 80) {
|
|
||||||
return "Overwhelmingly Positive";
|
|
||||||
} else if (score >= 60) {
|
|
||||||
return "Positive";
|
|
||||||
} else if (score >= 40) {
|
|
||||||
return "Mixed";
|
|
||||||
} else if (score >= 20) {
|
|
||||||
return "Negative";
|
|
||||||
} else {
|
|
||||||
return "Overwhelmingly Negative";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const userScoreLabel = getUserScoreLabel(userScore);
|
|
||||||
const userScoreColor =
|
|
||||||
userScore >= 80 ? "green" : userScore >= 50 ? "orange" : "red";
|
|
||||||
|
|
||||||
const respon = {
|
|
||||||
like_count: likes,
|
|
||||||
dislike_count: dislikes,
|
|
||||||
rating: engagement.rating,
|
|
||||||
userScore: {
|
|
||||||
label: userScoreLabel,
|
|
||||||
score: userScore,
|
|
||||||
color: userScoreColor,
|
|
||||||
},
|
|
||||||
engagement: {
|
|
||||||
likeColor: likeColor,
|
|
||||||
dislikeColor: dislikeColor,
|
|
||||||
percentage: {
|
|
||||||
likePercentage: `${likePercentage}%`,
|
|
||||||
dislikePercentage: `${dislikePercentage}%`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ReturnYouTubeDislikesApiRawResponse: engagement,
|
|
||||||
};
|
|
||||||
|
|
||||||
res.send(respon);
|
|
||||||
} else {
|
|
||||||
res.status(400).json("pls gib ID :3");
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json("whoops (error 500) >~<");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
|
|
||||||
const { v, imagePath, img } = req.params;
|
|
||||||
const { sqp, xywh } = req.query;
|
|
||||||
const sighMatch = req.url.match(/&sigh=([^&#]+)/);
|
|
||||||
const sigh = sighMatch ? sighMatch[1] : undefined;
|
|
||||||
|
|
||||||
|
|
||||||
const url = `https://yt.miruku.cafe/sb/i/${v}/${imagePath}/${img}?sqp=${sqp}&sigh=${sigh}&xywh=${req.query.xywh}`;
|
|
||||||
|
|
||||||
try {
|
|
||||||
let f = await modules.fetch(url + `?cachefixer=${btoa(Date.now())}`, {
|
|
||||||
method: req.method,
|
|
||||||
});
|
|
||||||
|
|
||||||
f.body.pipe(res);
|
|
||||||
console.log(url)
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error fetching image:", error);
|
|
||||||
res.status(500).send("Error fetching image");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/api/storyboards", async (req, res) => {
|
|
||||||
const { fetch } = await import("undici");
|
const { fetch } = await import("undici");
|
||||||
|
|
||||||
const id = req.query.v;
|
const id = req.query.v;
|
||||||
const l = req.query.h;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let url = `https://yt.miruku.cafe/api/v1/storyboards/${id}?width=320&height=180`;
|
if (id) {
|
||||||
|
const apiUrl = `https://ryd-proxy.kavin.rocks/votes/${id}&hash=d0550b6e28c8f93533a569c314d5b4e2`;
|
||||||
|
|
||||||
let f = await fetch(url);
|
const response = await fetch(apiUrl, {
|
||||||
let body = await f.text();
|
headers: headers, // Add headers to the fetch request
|
||||||
|
|
||||||
body = body.replace(/#xywh=(\d+),(\d+),(\d+),(\d+)/g, (match, x, y, w, h) => {
|
|
||||||
return `&xywh=${x},${y},${w},${h}`;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
res.send(body);
|
if (response.status === 400) {
|
||||||
} catch {}
|
const error = await response.json();
|
||||||
});
|
return res.status(400).send(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
const engagement = await response.json();
|
||||||
|
|
||||||
|
const likes = parseInt(engagement.likes) || 0;
|
||||||
|
const dislikes = parseInt(engagement.dislikes) || 0;
|
||||||
|
const total = likes + dislikes;
|
||||||
|
|
||||||
|
const likePercentage = total > 0 ? ((likes / total) * 100).toFixed(2) : 0;
|
||||||
|
const dislikePercentage = total > 0 ? ((dislikes / total) * 100).toFixed(2) : 0;
|
||||||
|
|
||||||
|
const getLikePercentageColor = (percentage) => {
|
||||||
|
if (percentage >= 80) {
|
||||||
|
return "green";
|
||||||
|
} else if (percentage >= 50) {
|
||||||
|
return "orange";
|
||||||
|
} else {
|
||||||
|
return "red";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getDislikePercentageColor = (percentage) => {
|
||||||
|
if (percentage >= 50) {
|
||||||
|
return "red";
|
||||||
|
} else if (percentage >= 20) {
|
||||||
|
return "orange";
|
||||||
|
} else {
|
||||||
|
return "green";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const likeColor = getLikePercentageColor(likePercentage);
|
||||||
|
const dislikeColor = getDislikePercentageColor(dislikePercentage);
|
||||||
|
|
||||||
|
const userScore = (
|
||||||
|
parseFloat(likePercentage) -
|
||||||
|
parseFloat(dislikePercentage) / 2
|
||||||
|
).toFixed(2);
|
||||||
|
|
||||||
|
const getUserScoreLabel = (score) => {
|
||||||
|
if (score >= 98) {
|
||||||
|
return "Masterpiece Video";
|
||||||
|
} else if (score >= 80) {
|
||||||
|
return "Overwhelmingly Positive";
|
||||||
|
} else if (score >= 60) {
|
||||||
|
return "Positive";
|
||||||
|
} else if (score >= 40) {
|
||||||
|
return "Mixed";
|
||||||
|
} else if (score >= 20) {
|
||||||
|
return "Negative";
|
||||||
|
} else {
|
||||||
|
return "Overwhelmingly Negative";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const userScoreLabel = getUserScoreLabel(userScore);
|
||||||
|
const userScoreColor =
|
||||||
|
userScore >= 80 ? "green" : userScore >= 50 ? "orange" : "red";
|
||||||
|
|
||||||
|
const respon = {
|
||||||
|
like_count: likes,
|
||||||
|
dislike_count: dislikes,
|
||||||
|
rating: engagement.rating,
|
||||||
|
userScore: {
|
||||||
|
label: userScoreLabel,
|
||||||
|
score: userScore,
|
||||||
|
color: userScoreColor,
|
||||||
|
},
|
||||||
|
engagement: {
|
||||||
|
likeColor: likeColor,
|
||||||
|
dislikeColor: dislikeColor,
|
||||||
|
percentage: {
|
||||||
|
likePercentage: `${likePercentage}%`,
|
||||||
|
dislikePercentage: `${dislikePercentage}%`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ReturnYouTubeDislikesApiRawResponse: engagement,
|
||||||
|
};
|
||||||
|
|
||||||
|
res.send(respon);
|
||||||
|
} else {
|
||||||
|
res.status(400).json("pls gib ID :3");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json("whoops (error 500) >~<");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.get("/feeds/videos.xml", async (req, res) => {
|
app.get("/feeds/videos.xml", async (req, res) => {
|
||||||
const id = req.query.channel_id;
|
const id = req.query.channel_id;
|
||||||
@ -273,25 +231,25 @@ app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
|
|||||||
|
|
||||||
let f = await modules.fetch(url, {
|
let f = await modules.fetch(url, {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
});
|
});
|
||||||
|
|
||||||
f.body.pipe(res);
|
f.body.pipe(res);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/api/manifest/dash/id/:id", async (req, res) => {
|
app.get("/api/manifest/dash/id/:id", async (req, res) => {
|
||||||
const id = req.params.id;
|
const id = req.params.id;
|
||||||
|
|
||||||
let url = `https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/manifest/dash/id/${id}`;
|
let url = `https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/manifest/dash/id/${id}`;
|
||||||
|
|
||||||
let f = await modules.fetch(url, {
|
let f = await modules.fetch(url, {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
});
|
});
|
||||||
|
|
||||||
f.body.pipe(res);
|
f.body.pipe(res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app.get("/api/redirect", async (req, res) => {
|
app.get("/api/redirect", async (req, res) => {
|
||||||
const red_url = atob(req.query.u);
|
const red_url = atob(req.query.u);
|
||||||
|
|
||||||
@ -314,38 +272,40 @@ app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
|
|||||||
let latestCommitHash;
|
let latestCommitHash;
|
||||||
|
|
||||||
const invidious = await modules
|
const invidious = await modules
|
||||||
.fetch("https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1/stats")
|
.fetch("https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1/stats", {
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
|
})
|
||||||
.then((res) => res.text())
|
.then((res) => res.text())
|
||||||
.then((txt) => getJson(txt));
|
.then((txt) => getJson(txt));
|
||||||
|
|
||||||
const cpus = os.cpus();
|
|
||||||
const totalMemory = os.totalmem() / (1024 * 1024 * 1024);
|
|
||||||
const roundedMemory = totalMemory.toFixed(2);
|
|
||||||
|
|
||||||
execSync('git rev-list HEAD -n 1 --abbrev-commit', (error, stdout, stderr) => {
|
const cpus = os.cpus();
|
||||||
if (error || stderr) {
|
const totalMemory = os.totalmem() / (1024 * 1024 * 1024);
|
||||||
console.error(`Error executing command: ${error || stderr}`);
|
const roundedMemory = totalMemory.toFixed(2);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
latestCommitHash = stdout.trim();
|
execSync('git rev-list HEAD -n 1 --abbrev-commit', (error, stdout, stderr) => {
|
||||||
});
|
if (error || stderr) {
|
||||||
|
console.error(`Error executing command: ${error || stderr}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
latestCommitHash = stdout.trim();
|
||||||
|
});
|
||||||
|
|
||||||
const response = {
|
const response = {
|
||||||
pt_version: {
|
pt_version: {
|
||||||
version:versmol,
|
version: versmol,
|
||||||
version_full:verfull,
|
version_full: verfull,
|
||||||
commit: latestCommitHash
|
commit: latestCommitHash,
|
||||||
},
|
},
|
||||||
branch,
|
branch,
|
||||||
updatequote,
|
updatequote,
|
||||||
relaseunixdate,
|
relaseunixdate,
|
||||||
vernum: versionnumber,
|
vernum: versionnumber,
|
||||||
codename,
|
codename,
|
||||||
config:cnf,
|
config: cnf,
|
||||||
system:{
|
system: {
|
||||||
ram:`${roundedMemory} GB`,
|
ram: `${roundedMemory} GB`,
|
||||||
cpu:cpus[0].model,
|
cpu: cpus[0].model,
|
||||||
},
|
},
|
||||||
packages: {
|
packages: {
|
||||||
libpt: version,
|
libpt: version,
|
||||||
@ -374,7 +334,9 @@ execSync('git rev-list HEAD -n 1 --abbrev-commit', (error, stdout, stderr) => {
|
|||||||
try {
|
try {
|
||||||
const url = `https://raw.githubusercontent.com/ashley0143/poke/main/instances.json`;
|
const url = `https://raw.githubusercontent.com/ashley0143/poke/main/instances.json`;
|
||||||
|
|
||||||
let f = await fetch(url)
|
let f = await fetch(url, {
|
||||||
|
headers: headers, // Add headers to the fetch request
|
||||||
|
})
|
||||||
.then((res) => res.text())
|
.then((res) => res.text())
|
||||||
.then((json) => JSON.parse(json));
|
.then((json) => JSON.parse(json));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user