修改源,添加酷狗源

main
amuliang 2023-08-05 12:49:00 +08:00
parent 7910b35811
commit 603bdb8478
6 changed files with 87 additions and 25 deletions

View File

@ -7,6 +7,7 @@ const { SuccessResult, ErrorResult } = require('./model/ResultModel');
const { QQSource } = require('./source/QQSource'); const { QQSource } = require('./source/QQSource');
const mfm = require('./source/MyFreemp3Source'); const mfm = require('./source/MyFreemp3Source');
const { KugouSource } = require('./source/KugouSource');
// 防止进程中断 // 防止进程中断
// process.on('uncaughtException', function (err) { // process.on('uncaughtException', function (err) {
@ -18,17 +19,18 @@ const searcher = new SearchModel();
//searcher.registerSourceModel(new QQSource()); //searcher.registerSourceModel(new QQSource());
searcher.registerSourceModel(new mfm.MyFreemp3QQSource()); searcher.registerSourceModel(new mfm.MyFreemp3QQSource());
searcher.registerSourceModel(new mfm.MyFreemp3NeteaseSource()); searcher.registerSourceModel(new mfm.MyFreemp3NeteaseSource());
searcher.registerSourceModel(new mfm.MyFreemp3KugouSource()); //searcher.registerSourceModel(new mfm.MyFreemp3KugouSource());
searcher.registerSourceModel(new mfm.MyFreemp3KuwoSource()); searcher.registerSourceModel(new mfm.MyFreemp3KuwoSource());
searcher.registerSourceModel(new mfm.MyFreemp3MiguSource()); //searcher.registerSourceModel(new mfm.MyFreemp3MiguSource());
searcher.registerSourceModel(new mfm.MyFreemp3QianqianSource()); searcher.registerSourceModel(new mfm.MyFreemp3QianqianSource());
searcher.registerSourceModel(new mfm.MyFreemp3QingtingSource()); //searcher.registerSourceModel(new mfm.MyFreemp3QingtingSource());
searcher.registerSourceModel(new mfm.MyFreemp3XimalayaSource()); //searcher.registerSourceModel(new mfm.MyFreemp3XimalayaSource());
searcher.registerSourceModel(new mfm.MyFreemp3LizhiSource()); //searcher.registerSourceModel(new mfm.MyFreemp3LizhiSource());
searcher.registerSourceModel(new mfm.MyFreemp3KgSource()); //searcher.registerSourceModel(new mfm.MyFreemp3KgSource());
searcher.registerSourceModel(new mfm.MyFreemp31tingSource()); //searcher.registerSourceModel(new mfm.MyFreemp31tingSource());
// searcher.registerSourceModel(new mfm.MyFreemp35singycSource()); // searcher.registerSourceModel(new mfm.MyFreemp35singycSource());
// searcher.registerSourceModel(new mfm.MyFreemp35singfcSource()); // searcher.registerSourceModel(new mfm.MyFreemp35singfcSource());
searcher.registerSourceModel(new KugouSource());
// *********************************************************************** // ***********************************************************************

View File

@ -1,5 +1,7 @@
const _request = require('request'); const _request = require('request');
const exts = ['mp3', 'acc', 'aiff', 'ape', 'au', 'flac', 'm4a', 'mmf', 'opus', 'voc', 'wav', 'ogg', 'ra', 'dvf', 'taa', 'dsf', 'diff', 'dts', 'wma'];
class SourceModel { class SourceModel {
constructor() { constructor() {
this.name = ""; this.name = "";
@ -9,6 +11,23 @@ class SourceModel {
return this.name; return this.name;
} }
checkExtension(ext) {
if(typeof(ext) == 'string' && ext.trim() != '') {
ext = ext.toLowerCase();
if(exts.indexOf(ext) >= 0) {
return ext;
}
for(let i = 0; i < exts.length; i++) {
if(ext.indexOf('.'+exts[i]) >= 0) {
return exts[i];
}
}
}
return '';
}
request(options) { request(options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
_request(options, function(error, response, body) { _request(options, function(error, response, body) {

View File

@ -20,7 +20,7 @@ function storeResource(path, url) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
mkdirsSync(_path.dirname(path)); mkdirsSync(_path.dirname(path));
const writeableStream = fs.createWriteStream(path); const writeableStream = fs.createWriteStream(path);
request.get({ url: url, timeout: 10000 }).pipe(writeableStream).on('close', () => { request.get({ url: url, timeout: 20000 }).pipe(writeableStream).on('close', () => {
resolve(true); resolve(true);
}); });
}); });

View File

@ -0,0 +1,56 @@
const { SourceModel } = require('../model/SourceModel');
class KugouSource extends SourceModel {
constructor() {
super();
this.name = "酷狗";
}
getExtension(url) {
return url.split('.').pop().toLowerCase();
}
async search(keywords) {
keywords = encodeURIComponent(keywords);
let search_result = await this.request({
url: `https://complexsearch.kugou.com/v2/search/song?callback=callback123&srcappid=2919&clientver=1000&clienttime=1691202199922&mid=32acdcbc2dd5869a4d7b70955007e5ff&uuid=32acdcbc2dd5869a4d7b70955007e5ff&dfid=11S8YH0fnvjm1hFwgx32LHUg&keyword=${keywords}&page=1&pagesize=30&bitrate=0&isfuzzy=0&inputtype=0&platform=WebFilter&userid=0&iscorrection=1&privilege_filter=0&filter=10&token=&appid=1014&signature=51f06a76df41782bbb4072a8337575cd`,
method: 'GET'
});
let json_string = search_result.replace(/^[^\(]*\(/, '').replace(/\)[^\)]*$/, '');
let json_data = JSON.parse(json_string);
let list = json_data.data.lists;
let items = [];
let length = list.length > 10 ? 10 : list.length;
for(let i = 0; i < length; i++) {
let item_link = `https://www.kugou.com/mixsong/${list[i].EMixSongID}.html`;
let item_result = await this.request({
url: `https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19108686411456290846_1691202312384&dfid=11S8YH0fnvjm1hFwgx32LHUg&appid=1014&mid=32acdcbc2dd5869a4d7b70955007e5ff&platid=4&encode_album_audio_id=${list[i].EMixSongID}`,
method: 'GET'
});
let json_string = item_result.replace(/^[^\(]*\(/, '').replace(/\)[^\)]*$/, '');
let json_data = JSON.parse(json_string);
let item = json_data.data;
items.push({
title: item.song_name,
author: item.author_name,
url: item.play_url,
link: item_link,
lrc: item.lyrics,
pic: item.img,
source_name: this.getName(),
extension: item.play_url ? this.checkExtension(this.getExtension(item.play_url)) : ''
});
}
return items;
}
}
// let kugou = new KugouSource();
// kugou.search('吻别');
module.exports = {
KugouSource
}

View File

@ -1,20 +1,5 @@
const { SourceModel } = require('../model/SourceModel'); const { SourceModel } = require('../model/SourceModel');
const exts = ['mp3', 'acc', 'aiff', 'ape', 'au', 'flac', 'm4a', 'mmf', 'opus', 'voc', 'wav', 'ogg', 'ra', 'dvf', 'taa', 'dsf', 'diff', 'dts', 'wma'];
function checkExtension(ext) {
if(exts.indexOf(ext) >= 0) {
return ext;
}
for(let i = 0; i < exts.length; i++) {
if(ext.indexOf('.'+exts[i]) >= 0) {
return exts[i];
}
}
return '';
}
class MyFreemp3Source extends SourceModel { class MyFreemp3Source extends SourceModel {
constructor() { constructor() {
super(); super();
@ -57,7 +42,7 @@ class MyFreemp3Source extends SourceModel {
lrc: item.lrc, lrc: item.lrc,
pic: item.pic, pic: item.pic,
source_name: this.getName(), source_name: this.getName(),
extension: item.url ? checkExtension(this.getExtension(item.url)) : '' extension: item.url ? this.checkExtension(this.getExtension(item.url)) : ''
} }
}); });
}else { }else {

View File

@ -123,7 +123,7 @@
data() { data() {
const ajax = axios.create({ const ajax = axios.create({
baseURL: document.location.href.indexOf('localhost') >= 0 ? 'http://localhost:5750' : 'http://musicdlr.amuliang.top:5750', baseURL: document.location.href.indexOf('localhost') >= 0 ? 'http://localhost:5750' : 'http://musicdlr.amuliang.top:5750',
timeout: 10000, timeout: 20000,
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
//'Access-Control-Allow-Origin': true //'Access-Control-Allow-Origin': true