修复播放切换,增加歌词搜索
parent
bf84344f9c
commit
995a967312
174
src/js/api.js
174
src/js/api.js
|
@ -1,143 +1,63 @@
|
||||||
/**
|
/**
|
||||||
* 音乐APP接口
|
* 部分远程接口
|
||||||
* @author yutent<yutent@doui.cc>
|
* @author yutent<yutent.io@gmail.com>
|
||||||
* @date 2018/12/24 16:02:00
|
* @date 2020/11/20 19:07:32
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict'
|
import fetch from './lib/fetch/index.js'
|
||||||
|
|
||||||
import request from '/lib/request/index.js'
|
function tojson(r) {
|
||||||
|
return r.json()
|
||||||
// `http://lyrics.kugou.com/search?client=pc&duration=188000&keyword=%E6%98%93%E7%83%8A%E5%8D%83%E7%8E%BA%20-%20%E4%BD%A0%E6%9B%BE%E6%98%AF%E5%B0%91%E5%B9%B4%20%28Live%29&man=no&ver=1`
|
|
||||||
|
|
||||||
// `http://lyrics.kugou.com/download?ver=1&client=pc&fmt=lrc&charset=utf8&accesskey=2128A0ED9B2F6B34C3AE23EA7ACC46A7&id=43066968`
|
|
||||||
|
|
||||||
const log = console.log
|
|
||||||
|
|
||||||
const BASE_API_URI = 'http://mobilecdnbj.kugou.com'
|
|
||||||
|
|
||||||
request.init({ dataType: 'json' })
|
|
||||||
|
|
||||||
const get = uri => {
|
|
||||||
return request.get(BASE_API_URI + uri)
|
|
||||||
}
|
|
||||||
|
|
||||||
const post = uri => {
|
|
||||||
return request.post(BASE_API_URI + uri)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getLastHot100Artists() {
|
searchLrc(keyword, duration) {
|
||||||
return get('/api/v5/singer/list', {
|
return fetch('http://lyrics.kugou.com/search', {
|
||||||
data: {
|
body: {
|
||||||
sort: 1,
|
client: 'pc',
|
||||||
showtype: 1,
|
duration: duration * 1000,
|
||||||
sextype: 0,
|
keyword,
|
||||||
musician: 0,
|
man: 'no',
|
||||||
pagesize: 100,
|
ver: 1
|
||||||
plat: 2,
|
|
||||||
type: 0,
|
|
||||||
page: 1
|
|
||||||
}
|
|
||||||
}).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
.then(tojson)
|
||||||
|
.then(r => {
|
||||||
getArtistList(sextype = 1, type = 1) {
|
if (r.candidates && r.candidates.length) {
|
||||||
return get('/api/v5/singer/list', {
|
return r.candidates.map(it => ({
|
||||||
data: {
|
id: it.id,
|
||||||
showtype: 2,
|
accesskey: it.accesskey,
|
||||||
musician: 0,
|
duration: it.duration,
|
||||||
type,
|
singer: it.singer,
|
||||||
sextype
|
song: it.song
|
||||||
}
|
}))
|
||||||
}).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
getArtistInfo(singerid) {
|
|
||||||
return get('/api/v3/singer/info', { data: { singerid } }).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
getArtistInfo(singerid) {
|
|
||||||
return get('/api/v3/singer/info', { data: { singerid } }).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
getArtistSongs(singerid, page = 1) {
|
|
||||||
return get('/api/v3/singer/song', {
|
|
||||||
data: {
|
|
||||||
sorttype: 2,
|
|
||||||
pagesize: 50,
|
|
||||||
singerid,
|
|
||||||
area_code: 1,
|
|
||||||
page
|
|
||||||
}
|
|
||||||
}).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
getArtistAlbums(singerid, page = 1) {
|
|
||||||
return get('/api/v3/singer/album', {
|
|
||||||
data: {
|
|
||||||
pagesize: 50,
|
|
||||||
singerid,
|
|
||||||
area_code: 1,
|
|
||||||
page
|
|
||||||
}
|
|
||||||
}).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
search(keyword, page = 1, pagesize = 20) {
|
|
||||||
return request
|
|
||||||
.get('https://songsearch.kugou.com/song_search_v2', {
|
|
||||||
data: {
|
|
||||||
keyword,
|
|
||||||
platform: 'WebFilter',
|
|
||||||
tag: '',
|
|
||||||
page,
|
|
||||||
pagesize
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
return res.body.data.lists
|
|
||||||
}
|
}
|
||||||
|
return []
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
getSongInfoByHash(hash, album_id = '') {
|
downloadLrc(id, accesskey) {
|
||||||
return request
|
return fetch('http://lyrics.kugou.com/download', {
|
||||||
.get('https://wwwapi.kugou.com/yy', {
|
body: {
|
||||||
data: {
|
client: 'pc',
|
||||||
r: 'play/getdata',
|
id,
|
||||||
hash,
|
accesskey,
|
||||||
album_id
|
ver: 1,
|
||||||
}
|
fmt: 'lrc',
|
||||||
})
|
charset: 'utf8'
|
||||||
.then(res => {
|
}
|
||||||
if (res.status === 200) {
|
})
|
||||||
return res.body.data
|
.then(tojson)
|
||||||
|
.then(r => {
|
||||||
|
if (r.status === 200 && r.content) {
|
||||||
|
var lrc
|
||||||
|
try {
|
||||||
|
lrc = Buffer.from(r.content, 'base64').toString()
|
||||||
|
lrc = lrc.split(/[\r\n]+/).join('\n')
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e, r)
|
||||||
|
}
|
||||||
|
return lrc
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import '/js/lib/scroll/index.js'
|
||||||
import Keyboard from '/js/lib/keyboard/index.js'
|
import Keyboard from '/js/lib/keyboard/index.js'
|
||||||
import app from '/js/lib/socket.js'
|
import app from '/js/lib/socket.js'
|
||||||
import fetch from '/js/lib/fetch/index.js'
|
import fetch from '/js/lib/fetch/index.js'
|
||||||
|
import Api from '/js/api.js'
|
||||||
|
|
||||||
import Player from '/js/lib/audio/index.js'
|
import Player from '/js/lib/audio/index.js'
|
||||||
|
|
||||||
|
@ -123,7 +124,7 @@ Anot({
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
this.playSong(this.list[idx], idx, repeat)
|
this.playSong(idx, repeat)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -226,6 +227,15 @@ Anot({
|
||||||
this.previewSong(it)
|
this.previewSong(it)
|
||||||
player.play(i)
|
player.play(i)
|
||||||
this.$refs.list.scrollTop = (i - 3) * 26
|
this.$refs.list.scrollTop = (i - 3) * 26
|
||||||
|
|
||||||
|
// if (!it.lrc) {
|
||||||
|
// Api.searchLrc(it.name, it.duration).then(list => {
|
||||||
|
// var { id, accesskey } = list[0]
|
||||||
|
// Api.downloadLrc(id, accesskey).then(lrc => {
|
||||||
|
// console.log(lrc)
|
||||||
|
// })
|
||||||
|
// })
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Reference in New Issue