mirror of https://github.com/IoTcat/acg.watch.git
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.
114 lines
3.0 KiB
114 lines
3.0 KiB
4 years ago
|
const express = require('express');
|
||
|
const fs = require('fs');
|
||
|
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);
|
||
|
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://api.yimian.xyz/video?path=404.pm4',
|
||
|
description: 'unknown',
|
||
|
danmakuID: '40404040',
|
||
|
'class': 'extra'
|
||
|
},
|
||
|
getAll: () => JSON.parse(fs.readFileSync(__dirname+'/../cache/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(__dirname+'/../cache/', event => video.reload());
|
||
|
|