finally, an API
This commit is contained in:
parent
4210075f37
commit
d88f6d9269
3 changed files with 73 additions and 16 deletions
57
index.js
57
index.js
|
@ -1,4 +1,5 @@
|
||||||
import { main } from "./site.js";
|
import { main, rankCalc } from "./site.js";
|
||||||
|
import e from "express";
|
||||||
|
|
||||||
let {
|
let {
|
||||||
site = 'darflen',
|
site = 'darflen',
|
||||||
|
@ -14,8 +15,56 @@ let {
|
||||||
user = 'paradock',
|
user = 'paradock',
|
||||||
matrixIterations = 3,
|
matrixIterations = 3,
|
||||||
useArchive = true,
|
useArchive = true,
|
||||||
isGpu = false
|
isGpu = false,
|
||||||
|
mode = 'cli',
|
||||||
|
port = 6952
|
||||||
} = process.env;
|
} = process.env;
|
||||||
let settings = { site, route, pageLimit, blackList, greyList, discardThreshold, delay, depth, isRelative, fetchRate, user, matrixIterations, useArchive, isGpu };
|
let settings = {
|
||||||
|
site, route, pageLimit, blackList, greyList, discardThreshold, delay,
|
||||||
|
depth, isRelative, fetchRate, user, matrixIterations, useArchive, isGpu
|
||||||
|
};
|
||||||
|
|
||||||
main(settings);
|
if (mode == 'cli') {
|
||||||
|
main(settings);
|
||||||
|
} else if (mode == 'site') {
|
||||||
|
const app = e();
|
||||||
|
app.get('/top', async (req, res) => {
|
||||||
|
let json = await fetch("https://nbg.dervland.net/api/followjson.php");
|
||||||
|
json = await json.json();
|
||||||
|
|
||||||
|
let data = {};
|
||||||
|
|
||||||
|
for (let entryI in json) {
|
||||||
|
let entry = json[entryI];
|
||||||
|
let user = data[entry.username] || {};
|
||||||
|
let target = data[entry.target] || {};
|
||||||
|
|
||||||
|
let f1 = user.following = user.following || [];
|
||||||
|
let f2 = user.followers = user.followers || [];
|
||||||
|
let f3 = target.following = target.following || [];
|
||||||
|
let f4 = target.followers = target.followers || [];
|
||||||
|
|
||||||
|
f3.push(entry.username);
|
||||||
|
f2.push(entry.target);
|
||||||
|
|
||||||
|
data[entry.username] = user;
|
||||||
|
data[entry.target] = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(data)
|
||||||
|
|
||||||
|
let calcedRank = rankCalc(data, matrixIterations, [], false, settings.isGpu);
|
||||||
|
let dat = Object.entries(calcedRank);
|
||||||
|
dat = dat.sort((a, b) => b[1] - a[1]);
|
||||||
|
console.log(`Graph is calculated with ${dat.length} entries`);
|
||||||
|
let dat2 = {};
|
||||||
|
for (let d of dat) {
|
||||||
|
dat2[d[0]] = d[1] * 100 + "%";
|
||||||
|
}
|
||||||
|
|
||||||
|
res.send(JSON.stringify(dat2))
|
||||||
|
})
|
||||||
|
|
||||||
|
app.listen(port);
|
||||||
|
console.log(`App listening on port ${port}`)
|
||||||
|
}
|
16
rank.js
16
rank.js
|
@ -57,20 +57,22 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu
|
||||||
pr[unn] = 0.1 / rl;
|
pr[unn] = 0.1 / rl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (let unn in result) {
|
for (let unn in result) {
|
||||||
let fnu = frs[unn];
|
let fnu = frs[unn];
|
||||||
if (!pr[unn]) pr[unn] = 0;
|
if (!pr[unn]) pr[unn] = 0;
|
||||||
for (let follow of fnu) {
|
for (let follow of fnu) {
|
||||||
if (follow == unn) continue;
|
if (follow == unn) continue;
|
||||||
let dst = fnc[fnu] || 0;
|
let dst = fnc[fnu] || 0;
|
||||||
let n = (keys.indexOf(unn) || 0) * (rl) + (keys.indexOf(follow) || 0) * 1;
|
let na = keys.indexOf(follow);
|
||||||
|
let nb = keys.indexOf(unn);
|
||||||
|
if (na == -1 || nb == -1) continue;
|
||||||
|
let n = (na) * (rl) + (nb) * 1;
|
||||||
matrixe[n] = 1.1 + 1 / (dst + 3);
|
matrixe[n] = 1.1 + 1 / (dst + 3);
|
||||||
msum_old += matrixe[n];
|
msum_old += matrixe[n];
|
||||||
}
|
}
|
||||||
|
|
||||||
let fail = 1;
|
let fail = 1;
|
||||||
|
if (domainMode) {
|
||||||
try {
|
try {
|
||||||
let h = new URL(unn);
|
let h = new URL(unn);
|
||||||
if (!(h.pathname == '/' || h.pathname == '')) fail *= 0.5;
|
if (!(h.pathname == '/' || h.pathname == '')) fail *= 0.5;
|
||||||
|
@ -79,6 +81,7 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fail != 1) {
|
if (fail != 1) {
|
||||||
for (let ig = (keys.indexOf(unn) || 0) * (rl); ig < ((keys.indexOf(unn) || 0) + 1) * (rl); ig++) {
|
for (let ig = (keys.indexOf(unn) || 0) * (rl); ig < ((keys.indexOf(unn) || 0) + 1) * (rl); ig++) {
|
||||||
|
@ -143,9 +146,14 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu
|
||||||
}
|
}
|
||||||
|
|
||||||
let ov = Object.keys(pr);
|
let ov = Object.keys(pr);
|
||||||
let new_sum = ov.filter(i => !isNaN(pr[i]) && main.indexOf(i) != -1).map(n => pr[n]).reduce((a, b) => a + b, 1e-9);
|
let an = ov.filter(i => !isNaN(pr[i]) && main.indexOf(i) != -1);
|
||||||
|
let new_sum = an.map(n => pr[n]).reduce((a, b) => a + b, 1e-9);
|
||||||
let new_sum2 = ov.filter(i => !isNaN(pr[i]) && main.indexOf(i) == -1).map(n => pr[n]).reduce((a, b) => a + b, 1e-9);
|
let new_sum2 = ov.filter(i => !isNaN(pr[i]) && main.indexOf(i) == -1).map(n => pr[n]).reduce((a, b) => a + b, 1e-9);
|
||||||
|
|
||||||
|
if (an.length == 0) {
|
||||||
|
new_sum2 /= 2;
|
||||||
|
}
|
||||||
|
|
||||||
for (let unn of ov) {
|
for (let unn of ov) {
|
||||||
if (!result[unn]) {
|
if (!result[unn]) {
|
||||||
pr[unn] = 0;
|
pr[unn] = 0;
|
||||||
|
|
2
site.js
2
site.js
|
@ -347,4 +347,4 @@ async function main(settings) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export { main };
|
export { main, rankCalc };
|
Loading…
Reference in a new issue