music-downloader/app/main.js

117 lines
4.3 KiB
JavaScript
Raw Normal View History

2023-07-30 08:49:23 +00:00
const http = require("http");
const url = require("url");
const { ServerModel } = require('./model/ServerModel');
const { SearchModel } = require('./model/SearchModel');
2023-08-03 14:59:36 +00:00
const { storeMusic, storeLrc, storePic, checkMusicExists } = require('./model/StoreModel');
2023-07-30 08:49:23 +00:00
const { SuccessResult, ErrorResult } = require('./model/ResultModel');
const { QQSource } = require('./source/QQSource');
2023-08-02 14:49:56 +00:00
const mfm = require('./source/MyFreemp3Source');
2023-07-30 08:49:23 +00:00
2023-08-01 15:48:57 +00:00
// 防止进程中断
// process.on('uncaughtException', function (err) {
// console.log('Caught exception: ' + err);
// });
2023-07-30 08:49:23 +00:00
// ***********************************************************************
// 注册源
const searcher = new SearchModel();
2023-08-02 14:49:56 +00:00
//searcher.registerSourceModel(new QQSource());
searcher.registerSourceModel(new mfm.MyFreemp3QQSource());
searcher.registerSourceModel(new mfm.MyFreemp3NeteaseSource());
searcher.registerSourceModel(new mfm.MyFreemp3KugouSource());
searcher.registerSourceModel(new mfm.MyFreemp3KuwoSource());
searcher.registerSourceModel(new mfm.MyFreemp3MiguSource());
searcher.registerSourceModel(new mfm.MyFreemp3QianqianSource());
searcher.registerSourceModel(new mfm.MyFreemp3QingtingSource());
searcher.registerSourceModel(new mfm.MyFreemp3XimalayaSource());
searcher.registerSourceModel(new mfm.MyFreemp3LizhiSource());
searcher.registerSourceModel(new mfm.MyFreemp3KgSource());
searcher.registerSourceModel(new mfm.MyFreemp31tingSource());
2023-08-02 15:58:47 +00:00
// searcher.registerSourceModel(new mfm.MyFreemp35singycSource());
// searcher.registerSourceModel(new mfm.MyFreemp35singfcSource());
2023-07-30 08:49:23 +00:00
// ***********************************************************************
// 添加API接口
const _server = new ServerModel();
2023-08-03 14:59:36 +00:00
2023-07-31 16:29:59 +00:00
_server.get("/api/source/all", (req, res, query) => {
2023-07-30 08:49:23 +00:00
// 罗列都有哪些源
return new SuccessResult(searcher.getSourceList());
});
2023-07-31 16:29:59 +00:00
_server.get("/api/search", async (req, res, query) => {
2023-07-30 08:49:23 +00:00
//从源去进行搜索
2023-07-31 16:29:59 +00:00
let result = await searcher.searchMusic(query.source_name, query.keywords);
2023-07-30 08:49:23 +00:00
return new SuccessResult(result);
2023-08-01 15:48:57 +00:00
});
2023-08-03 14:59:36 +00:00
_server.get("/api/store/check", async (req, res, query) => {
let is_exists = checkMusicExists(query.music_path);
return new SuccessResult(is_exists);
});
2023-08-01 15:48:57 +00:00
_server.get("/api/store", async (req, res, query) => {
//存储文件
let music_path = query.music_path;
let music_url = query.music_url;
let lrc_content = query.lrc_content;
let pic_url = query.pic_url;
let store_music = parseInt(query.store_music);
let store_lrc = parseInt(query.store_lrc);
let store_pic = parseInt(query.store_pic);
let path_name = music_path.split('.').slice(0,-1).join('.');
let pic_extension = pic_url.split('?')[0].split('.').pop();
let result = '';
if(store_music) {
await storeMusic(music_path, music_url);
result += '保存歌曲成功! ';
}
if(store_lrc) {
await storeLrc(path_name + '.lrc', lrc_content);
result += '保存歌词成功! ';
}
if(store_pic) {
await storePic(path_name + '.' + pic_extension, pic_url);
result += '保存封面成功! ';
}
return new SuccessResult(result);
});
2023-07-30 08:49:23 +00:00
// ***********************************************************************
// 运行服务
2023-07-31 16:29:59 +00:00
const server = http.createServer(async (req, res) => {
2023-07-30 08:49:23 +00:00
let method = req.method;
let reqUrl = req.url;
let reqApi = reqUrl.split('?')[0];
2023-08-01 15:48:57 +00:00
console.log(method, reqUrl);
2023-08-03 14:59:36 +00:00
2023-07-30 08:49:23 +00:00
let result;
2023-08-01 15:48:57 +00:00
try {
if(method == "GET") {
let query = url.parse(reqUrl, true).query;
result = await _server.trigger(method, reqApi, req, res, query, null);
}else if(method == "POST") {
let query = url.parse(reqUrl, true).query;
let data = {};
result = await _server.trigger(method, reqApi, req, res, query, data);
}
}catch(err) {
console.error(err);
result = new ErrorResult(err);
2023-07-30 08:49:23 +00:00
}
2023-08-03 14:59:36 +00:00
2023-07-31 16:29:59 +00:00
res.setHeader('Access-Control-Allow-Origin', '*');
//res.setHeader('Access-Control-Allow-Methods', '*');
res.setHeader('Access-Control-Allow-Headers', '*');
res.setHeader('Content-type', 'application/json;charset=utf-8');
//res.writeHead(200, { 'Content-type': 'application/json;charset=utf-8' });
2023-07-30 08:49:23 +00:00
res.end(JSON.stringify(result));
});
server.listen(5000, () => {
console.log("server running at prot 5000");
});