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.
113 lines
3.0 KiB
113 lines
3.0 KiB
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()); |
|
|
|
|