mirror of
https://codeberg.org/ashley/poke.git
synced 2024-11-17 08:34:42 -05:00
Reformat main file, add embeds :3
This commit is contained in:
parent
f08e87d3e9
commit
9d75ff1eab
1 changed files with 154 additions and 132 deletions
286
server.js
286
server.js
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
PokeTube is an Free/Libre youtube front-end. this is our main file.
|
PokeTube is an Free/Libre youtube front-end. this is our main file.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
along with this program. If not, see https://www.gnu.org/licenses/.
|
along with this program. If not, see https://www.gnu.org/licenses/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///////// definitions /////////////////
|
///////////// DEFINITONS /////////////
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const htmlParser = require("node-html-parser");
|
const htmlParser = require("node-html-parser");
|
||||||
const getColors = require("get-image-colors");
|
const getColors = require("get-image-colors");
|
||||||
|
@ -33,16 +33,15 @@ const templateDir = path.resolve(`${process.cwd()}${path.sep}html`);
|
||||||
|
|
||||||
var express = require("express");
|
var express = require("express");
|
||||||
var useragent = require("express-useragent");
|
var useragent = require("express-useragent");
|
||||||
|
|
||||||
// hash
|
// hash
|
||||||
const sha384 = require("js-sha512").sha384;
|
const sha384 = require("js-sha512").sha384;
|
||||||
|
|
||||||
const musicInfo = require("music-info");
|
const musicInfo = require("music-info");
|
||||||
const wiki = require('wikipedia');
|
const wiki = require("wikipedia");
|
||||||
|
|
||||||
|
var http = require("http");
|
||||||
var http = require('http');
|
var https = require("https");
|
||||||
var https = require('https');
|
|
||||||
|
|
||||||
http.globalAgent.maxSockets = Infinity;
|
http.globalAgent.maxSockets = Infinity;
|
||||||
https.globalAgent.maxSockets = Infinity;
|
https.globalAgent.maxSockets = Infinity;
|
||||||
|
@ -70,7 +69,7 @@ const random_words = [
|
||||||
"how to become a god?",
|
"how to become a god?",
|
||||||
"is a panda a panda if pandas???",
|
"is a panda a panda if pandas???",
|
||||||
"Minecraft movie trailer",
|
"Minecraft movie trailer",
|
||||||
"monke"
|
"monke",
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -82,41 +81,22 @@ const config = {
|
||||||
t_url: "https://t.poketube.fun/", // def matomo url
|
t_url: "https://t.poketube.fun/", // def matomo url
|
||||||
};
|
};
|
||||||
|
|
||||||
// pages
|
///////////// PAGES /////////////
|
||||||
|
|
||||||
|
|
||||||
function IsJsonString(str) {
|
function IsJsonString(str) {
|
||||||
try {
|
try {
|
||||||
JSON.parse(str);
|
JSON.parse(str);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(function(req, res, next) {
|
app.use(function (req, res, next) {
|
||||||
res.header("Access-Control-Allow-Origin", "*");
|
res.header("Access-Control-Allow-Origin", "*");
|
||||||
|
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
app.get("/api/subtitles", async (req, res) => {
|
|
||||||
const id = req.query.v;
|
|
||||||
const l = req.query.h;
|
|
||||||
|
|
||||||
const url = `https://tube.kuylar.dev/proxy/caption/${id}/${l}/`
|
|
||||||
|
|
||||||
let f = await fetch(url);
|
|
||||||
const body = await f.text();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
res.send(body)
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/api/opensearch", async (req, res) => {
|
|
||||||
res.sendFile(__dirname + `/opensearch.xml`);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/encryption", async function (req, res) {
|
app.get("/encryption", async function (req, res) {
|
||||||
var v = req.query.v;
|
var v = req.query.v;
|
||||||
|
@ -155,6 +135,7 @@ app.get("/encryption", async function (req, res) {
|
||||||
res.json(re);
|
res.json(re);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
///////////// VIDEO PAGES ETC. /////////////
|
||||||
app.get("/watch", async function (req, res) {
|
app.get("/watch", async function (req, res) {
|
||||||
/*
|
/*
|
||||||
* QUERYS
|
* QUERYS
|
||||||
|
@ -177,42 +158,45 @@ app.get("/watch", async function (req, res) {
|
||||||
const info = await fetch("http://ip-api.com/json/");
|
const info = await fetch("http://ip-api.com/json/");
|
||||||
const jj = await info.text();
|
const jj = await info.text();
|
||||||
const ip = JSON.parse(jj);
|
const ip = JSON.parse(jj);
|
||||||
var badges = ""
|
var badges = "";
|
||||||
|
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
try {
|
try {
|
||||||
const nightly = await fetch(
|
const nightly = await fetch(
|
||||||
`https://lighttube-nightly.kuylar.dev/api/video?v=${v}`
|
`https://lighttube-nightly.kuylar.dev/api/video?v=${v}`
|
||||||
);
|
);
|
||||||
var n = await nightly.text();
|
var n = await nightly.text();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.status === 503) {
|
if (err.status === 503) {
|
||||||
// retry after a bit
|
// retry after a bit
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||||
} else {
|
} else {
|
||||||
return (n = "none");
|
return (n = "none");
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var nn = "";
|
var nn = "";
|
||||||
|
|
||||||
if (n === "none") {badges = "";}
|
if (n === "none") {
|
||||||
if(IsJsonString(n)){
|
badges = "";
|
||||||
|
|
||||||
if (n !== "none") {badges = JSON.parse(n).channel.badges[0]}
|
|
||||||
}
|
|
||||||
|
|
||||||
var comments = ""
|
|
||||||
if (n === "none") { comments = ""; }
|
|
||||||
if(IsJsonString(n)){
|
|
||||||
if (n !== "none") { comments = JSON.parse(n).commentCount }
|
|
||||||
}
|
}
|
||||||
|
if (IsJsonString(n)) {
|
||||||
|
if (n !== "none") {
|
||||||
|
badges = JSON.parse(n).channel.badges[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var comments = "";
|
||||||
|
if (n === "none") {
|
||||||
|
comments = "";
|
||||||
|
}
|
||||||
|
if (IsJsonString(n)) {
|
||||||
|
if (n !== "none") {
|
||||||
|
comments = JSON.parse(n).commentCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var fetching = await fetcher(v);
|
var fetching = await fetcher(v);
|
||||||
|
|
||||||
const json = fetching.video.Player;
|
const json = fetching.video.Player;
|
||||||
|
@ -225,7 +209,7 @@ app.get("/watch", async function (req, res) {
|
||||||
if (q === "medium") {
|
if (q === "medium") {
|
||||||
var url = `https://tube.kuylar.dev/proxy/media/${v}/18`;
|
var url = `https://tube.kuylar.dev/proxy/media/${v}/18`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// encryption
|
// encryption
|
||||||
const url_e =
|
const url_e =
|
||||||
url +
|
url +
|
||||||
|
@ -244,15 +228,19 @@ app.get("/watch", async function (req, res) {
|
||||||
const tj = JSON.parse(toJson(c));
|
const tj = JSON.parse(toJson(c));
|
||||||
|
|
||||||
// lyrics
|
// lyrics
|
||||||
// const lyrics = await lyricsFinder(json.Title);
|
// const lyrics = await lyricsFinder(json.Title);
|
||||||
|
|
||||||
const summary = await wiki.summary(k.Video.Channel.Name);
|
const summary = await wiki.summary(k.Video.Channel.Name);
|
||||||
|
|
||||||
var w = ""
|
var w = "";
|
||||||
if(summary.title === "Not found.") { w = "none" }
|
if (summary.title === "Not found.") {
|
||||||
if(summary.title !== "Not found.") {w = summary}
|
w = "none";
|
||||||
|
}
|
||||||
renderTemplate(res, req, "poketube.ejs", {
|
if (summary.title !== "Not found.") {
|
||||||
|
w = summary;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderTemplate(res, req, "poketube.ejs", {
|
||||||
url: url_e,
|
url: url_e,
|
||||||
color: await getColors(
|
color: await getColors(
|
||||||
`https://i.ytimg.com/vi/${v}/maxresdefault.jpg`
|
`https://i.ytimg.com/vi/${v}/maxresdefault.jpg`
|
||||||
|
@ -262,25 +250,23 @@ app.get("/watch", async function (req, res) {
|
||||||
date: moment(k.Video.uploadDate).format("LL"),
|
date: moment(k.Video.uploadDate).format("LL"),
|
||||||
e: e,
|
e: e,
|
||||||
k: k,
|
k: k,
|
||||||
process:process,
|
process: process,
|
||||||
sha384: sha384,
|
sha384: sha384,
|
||||||
isMobile: req.useragent.isMobile,
|
isMobile: req.useragent.isMobile,
|
||||||
tj: tj,
|
tj: tj,
|
||||||
r: r,
|
r: r,
|
||||||
qua: q,
|
qua: q,
|
||||||
ip:ip,
|
ip: ip,
|
||||||
wiki:w,
|
wiki: w,
|
||||||
f: f,
|
f: f,
|
||||||
t: config.t_url,
|
t: config.t_url,
|
||||||
optout: t,
|
optout: t,
|
||||||
badges:badges,
|
badges: badges,
|
||||||
comments:comments,
|
comments: comments,
|
||||||
lyrics: "",
|
lyrics: "",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app.get("/music", async function (req, res) {
|
app.get("/music", async function (req, res) {
|
||||||
/*
|
/*
|
||||||
* QUERYS
|
* QUERYS
|
||||||
|
@ -300,7 +286,7 @@ app.get("/music", async function (req, res) {
|
||||||
const info = await fetch("http://ip-api.com/json/");
|
const info = await fetch("http://ip-api.com/json/");
|
||||||
const n = await info.text();
|
const n = await info.text();
|
||||||
const ip = JSON.parse(n);
|
const ip = JSON.parse(n);
|
||||||
|
|
||||||
if (!v) res.redirect("/");
|
if (!v) res.redirect("/");
|
||||||
|
|
||||||
const video = await fetch(config.tubeApi + `video?v=${v}`);
|
const video = await fetch(config.tubeApi + `video?v=${v}`);
|
||||||
|
@ -342,15 +328,15 @@ app.get("/music", async function (req, res) {
|
||||||
1000
|
1000
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!song) {
|
if (!song) {
|
||||||
res.redirect(`/watch?v=${v}`);
|
res.redirect(`/watch?v=${v}`);
|
||||||
}
|
}
|
||||||
var lyrics = await musicInfo
|
var lyrics = await musicInfo
|
||||||
.searchLyrics({ title: song.title, artist: song.artist })
|
.searchLyrics({ title: song.title, artist: song.artist })
|
||||||
.catch(() => null);
|
.catch(() => null);
|
||||||
|
|
||||||
var ly = "";
|
var ly = "";
|
||||||
|
|
||||||
if (lyrics === null) {
|
if (lyrics === null) {
|
||||||
ly = "This Is Where I'd Put The songs lyrics. IF IT HAD ONE ";
|
ly = "This Is Where I'd Put The songs lyrics. IF IT HAD ONE ";
|
||||||
}
|
}
|
||||||
|
@ -366,8 +352,8 @@ app.get("/music", async function (req, res) {
|
||||||
`https://i.ytimg.com/vi/${v}/maxresdefault.jpg`
|
`https://i.ytimg.com/vi/${v}/maxresdefault.jpg`
|
||||||
).then((colors) => colors[0].hex()),
|
).then((colors) => colors[0].hex()),
|
||||||
engagement: engagement,
|
engagement: engagement,
|
||||||
process:process,
|
process: process,
|
||||||
ip:ip,
|
ip: ip,
|
||||||
video: json,
|
video: json,
|
||||||
date: moment(k.Video.uploadDate).format("LL"),
|
date: moment(k.Video.uploadDate).format("LL"),
|
||||||
e: e,
|
e: e,
|
||||||
|
@ -418,23 +404,34 @@ app.get("/old/watch", async function (req, res) {
|
||||||
var v = req.query.v;
|
var v = req.query.v;
|
||||||
var e = req.query.e;
|
var e = req.query.e;
|
||||||
if (!v) res.redirect("/");
|
if (!v) res.redirect("/");
|
||||||
|
|
||||||
res.redirect(`/watch?v=${v}`);
|
res.redirect(`/watch?v=${v}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/", async function (req, res) {
|
app.get("/search", async (req, res) => {
|
||||||
const trends = await fetch(config.tubeApi + `trending`);
|
const { toJson } = require("xml2json");
|
||||||
const h = await trends.text();
|
const query = req.query.query;
|
||||||
const k = JSON.parse(toJson(h));
|
const search = await fetch(
|
||||||
renderTemplate(res, req, "main.ejs", {
|
`https://tube.kuylar.dev/api/search?query=${query}`
|
||||||
k: k,
|
);
|
||||||
isMobile: req.useragent.isMobile,
|
|
||||||
|
const text = await search.text();
|
||||||
|
const j = JSON.parse(toJson(text));
|
||||||
|
|
||||||
|
if (!query) {
|
||||||
|
return res.redirect("/");
|
||||||
|
}
|
||||||
|
|
||||||
|
renderTemplate(res, req, "search.ejs", {
|
||||||
|
j: j,
|
||||||
|
q: query,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/channel", async (req, res) => {
|
app.get("/channel/", async (req, res) => {
|
||||||
const ID = req.query.id;
|
const ID = req.query.id;
|
||||||
|
|
||||||
|
|
||||||
// about
|
// about
|
||||||
const bout = await fetch(config.tubeApi + `channel?id=${ID}&tab=about`);
|
const bout = await fetch(config.tubeApi + `channel?id=${ID}&tab=about`);
|
||||||
const h = await bout.text();
|
const h = await bout.text();
|
||||||
|
@ -459,7 +456,7 @@ app.get("/channel", async (req, res) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// static
|
///////////// STATIC /////////////
|
||||||
app.get("/privacy", function (req, res) {
|
app.get("/privacy", function (req, res) {
|
||||||
renderTemplate(res, req, "priv.ejs");
|
renderTemplate(res, req, "priv.ejs");
|
||||||
});
|
});
|
||||||
|
@ -471,39 +468,11 @@ app.get("/143", function (req, res) {
|
||||||
app.get("/domains", function (req, res) {
|
app.get("/domains", function (req, res) {
|
||||||
renderTemplate(res, req, "domains.ejs");
|
renderTemplate(res, req, "domains.ejs");
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/license", function (req, res) {
|
app.get("/license", function (req, res) {
|
||||||
renderTemplate(res, req, "license.ejs");
|
renderTemplate(res, req, "license.ejs");
|
||||||
});
|
});
|
||||||
|
|
||||||
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("/search", async (req, res) => {
|
|
||||||
const { toJson } = require("xml2json");
|
|
||||||
const query = req.query.query;
|
|
||||||
const search = await fetch(
|
|
||||||
`https://tube.kuylar.dev/api/search?query=${query}`
|
|
||||||
);
|
|
||||||
|
|
||||||
const text = await search.text();
|
|
||||||
const j = JSON.parse(toJson(text));
|
|
||||||
|
|
||||||
if (!query) {
|
|
||||||
return res.redirect("/");
|
|
||||||
}
|
|
||||||
|
|
||||||
renderTemplate(res, req, "search.ejs", {
|
|
||||||
j: j,
|
|
||||||
q: query,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/css/:id", (req, res) => {
|
app.get("/css/:id", (req, res) => {
|
||||||
res.sendFile(__dirname + `/css/${req.params.id}`);
|
res.sendFile(__dirname + `/css/${req.params.id}`);
|
||||||
});
|
});
|
||||||
|
@ -516,8 +485,21 @@ app.get("/video/upload", (req, res) => {
|
||||||
res.redirect("https://youtube.com/upload");
|
res.redirect("https://youtube.com/upload");
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/discover", async function (req, res) {
|
///////////// API /////////////
|
||||||
res.redirect("/");
|
|
||||||
|
app.get("/embed/:v", async function (req, res) {
|
||||||
|
var v = req.params.v;
|
||||||
|
|
||||||
|
res.redirect(`https://tube.kuylar.dev/proxy/media/${v}/18`);
|
||||||
|
});
|
||||||
|
|
||||||
|
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) {
|
||||||
|
@ -545,6 +527,45 @@ app.get("/api/video/downloadjson", async function (req, res) {
|
||||||
res.json(url);
|
res.json(url);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get("/api/subtitles", async (req, res) => {
|
||||||
|
const id = req.query.v;
|
||||||
|
const l = req.query.h;
|
||||||
|
|
||||||
|
const url = `https://tube.kuylar.dev/proxy/caption/${id}/${l}/`;
|
||||||
|
|
||||||
|
let f = await fetch(url);
|
||||||
|
const body = await f.text();
|
||||||
|
|
||||||
|
res.send(body);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/api/opensearch", async (req, res) => {
|
||||||
|
res.sendFile(__dirname + `/opensearch.xml`);
|
||||||
|
});
|
||||||
|
///////////// REDIRECTS / DEPRACATED /////////////
|
||||||
|
|
||||||
|
app.get("/discover", async function (req, res) {
|
||||||
|
res.redirect("/");
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/video/upload", (req, res) => {
|
||||||
|
res.redirect("https://youtube.com/upload");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////// 404 AND MAIN PAGES ETC /////////////
|
||||||
|
app.get("/", async function (req, res) {
|
||||||
|
const trends = await fetch(config.tubeApi + `trending`);
|
||||||
|
const h = await trends.text();
|
||||||
|
const k = JSON.parse(toJson(h));
|
||||||
|
renderTemplate(res, req, "main.ejs", {
|
||||||
|
k: k,
|
||||||
|
isMobile: req.useragent.isMobile,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
app.get("*", function (req, res) {
|
app.get("*", function (req, res) {
|
||||||
const things = random_words[Math.floor(Math.random() * random_words.length)];
|
const things = random_words[Math.floor(Math.random() * random_words.length)];
|
||||||
renderTemplate(res, req, "404.ejs", {
|
renderTemplate(res, req, "404.ejs", {
|
||||||
|
@ -552,7 +573,8 @@ app.get("*", function (req, res) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////
|
||||||
|
|
||||||
// listen
|
// listen
|
||||||
|
|
||||||
app.listen("3000", () => {});
|
app.listen("3000", () => {});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue