You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

116 lines
3.2 KiB

const express = require('express');
const fs = require('fs');
const md5 = require('md5');
var app = express();
app.listen(30080, function () {
console.log('ACG.WATCH API listening on port 30080!');
});
app.get('/api/', (req, res)=>{
res.send('Hello from ACG.WATCH API!!');
});
app.get('/api/getAll', async (req, res) => {
res.send(video.obj);
});
app.get('/api/getClassBySeries', async (req, res)=>{
await video.getClassBySeries(req.query['class'])
.then(classess => res.send(classess))
.catch(err => {
var tmp = {};
Object.assign(tmp, video.unknownObj);
res.send(tmp);
});
});
app.get('/api/getVideoByUrl', async (req, res) => {
await video.getVideoByUrl(req.query.url)
.then(video => res.send(video))
.catch(err => {
var tmp = {};
Object.assign(tmp, video.unknownObj);
tmp.url = req.query.url;
tmp.danmakuID = md5(req.query.url).substring(0, 8); //String(parseInt(Math.random()*(90000000-50000000+1)+50000000,10));
res.send(tmp);
});
});
app.get('/api/getNextByUrl', async (req, res) => {
await video.getNextByUrl(req.query.url)
.then(video => res.send(video))
.catch(err => {
var tmp = {};
Object.assign(tmp, video.unknownObj);
res.send(tmp);
});
});
var video = {
obj: {},
unknownObj: {
name: 'unknown',
season: 'unknown',
url: 'https://cdn.yimian.xyz/video/404.mp4',
description: 'unknown',
danmakuID: '40404040',
'class': 'extra'
},
getAll: () => JSON.parse(fs.readFileSync('mnt/cache/video/video.json')),
getClassBySeries: series => new Promise((resolve, reject) => {
Object.keys(video.obj).forEach(item => {
if(video.obj[item].hasOwnProperty(series)){
resolve(item);
}
});
reject('err in get Class By Series');
}),
getVideoByUrl: url => new Promise((resolve, reject) => {
Object.keys(video.obj).forEach(
classes => {
Object.keys(video.obj[classes]).forEach(series => {
video.obj[classes][series]['video'].forEach((vid, index) => {
if(vid.url == url){
resolve(video.getVideo(classes, series, index));
}
});
});
}
);
reject('err in getVideoByUrl');
}),
getVideo: (classes, series, vid) => {
if(vid >= video.obj[classes][series]['video'].length){
vid = 0;
}
var tmp = {
"class": classes,
"seriesID": series,
"vid": vid
};
Object.assign(tmp, video.obj[classes][series]['video'][vid]);
return tmp;
},
getNextByUrl: url => new Promise(async (resolve, reject) => {
try{
var lastVideo = await video.getVideoByUrl(url);
resolve(video.getVideo(lastVideo['class'], lastVideo.seriesID, lastVideo.vid+1));
}catch(e){
reject(e);
}
}),
reload: () => {
video.obj = video.getAll();
},
}
/* watch video.json cache */
video.reload();
fs.watch('/mnt/cache/video/', event => video.reload());