更新搜索提示词

This commit is contained in:
Folltoshe 2023-04-26 22:51:27 +08:00
parent 69640076b7
commit 2296e23860
12 changed files with 121 additions and 29 deletions

View File

@ -22,7 +22,7 @@ export default {
const visibleList = ref(false) const visibleList = ref(false)
const tipList = ref([]) const tipList = ref([])
let isFocused = false let isFocused = false
let prevTempSearchSource = '' let prevTipSearchSource = ''
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
@ -44,19 +44,19 @@ export default {
handleTipSearch() handleTipSearch()
}) })
const tipSearch = debounce(async() => { const tipSearch = debounce(async() => {
if (searchText.value === '' && prevTempSearchSource) { if (searchText.value === '' && prevTipSearchSource) {
tipList.value = [] tipList.value = []
music[prevTempSearchSource].tempSearch.cancelTempSearch() music[prevTipSearchSource].tipSearch.cancelTipSearch()
return return
} }
const { temp_source } = await getSearchSetting() const { source, temp_source } = await getSearchSetting()
prevTempSearchSource = temp_source prevTipSearchSource = source
music[prevTempSearchSource].tempSearch.search(searchText.value).then(list => { if (source === 'all') prevTipSearchSource = temp_source
music[prevTipSearchSource].tipSearch.search(searchText.value).then(list => {
tipList.value = list tipList.value = list
}).catch(() => {}) }).catch(() => {})
}, 50) }, 100)
const handleTipSearch = () => { const handleTipSearch = () => {
if (!visibleList.value && isFocused) visibleList.value = true if (!visibleList.value && isFocused) visibleList.value = true

View File

@ -6,8 +6,10 @@ import pic from './pic'
import lyric from './lyric' import lyric from './lyric'
import hotSearch from './hotSearch' import hotSearch from './hotSearch'
import comment from './comment' import comment from './comment'
import tipSearch from './tipSearch'
const kg = { const kg = {
tipSearch,
leaderboard, leaderboard,
songList, songList,
musicSearch, musicSearch,

View File

@ -0,0 +1,25 @@
import { createHttpFetch } from './util'
export default {
requestObj: null,
cancelTipSearch() {
if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp()
},
tipSearchBySong(str) {
this.cancelTipSearch()
this.requestObj = createHttpFetch(`https://searchtip.kugou.com/getSearchTip?MusicTipCount=10&keyword=${encodeURIComponent(str)}`, {
headers: {
referer: 'https://www.kugou.com/',
},
})
return this.requestObj.then(body => {
return body[0].RecordDatas
})
},
handleResult(rawData) {
return rawData.map(info => info.HintInfo)
},
async search(str) {
return this.tipSearchBySong(str).then(result => this.handleResult(result))
},
}

View File

@ -1,5 +1,5 @@
import { httpFetch } from '../../request' import { httpFetch } from '../../request'
import tempSearch from './tempSearch' import tipSearch from './tipSearch'
import musicSearch from './musicSearch' import musicSearch from './musicSearch'
import { formatSinger, getToken } from './util' import { formatSinger, getToken } from './util'
import leaderboard from './leaderboard' import leaderboard from './leaderboard'
@ -32,7 +32,7 @@ const kw = {
// // }) // // })
// }, // },
tempSearch, tipSearch,
musicSearch, musicSearch,
leaderboard, leaderboard,
songList, songList,

View File

@ -1,15 +1,13 @@
// import { httpFetch } from '../../request'
import { decodeName } from '../../index' import { decodeName } from '../../index'
import { tokenRequest } from './util' import { tokenRequest } from './util'
export default { export default {
regExps: { regExps: {
relWord: /RELWORD=(.+)/, relWord: /RELWORD=(.+)/,
}, },
requestObj: null, requestObj: null,
async tempSearch(str) { async tipSearchBySong(str) {
this.cancelTempSearch() this.cancelTipSearch()
this.requestObj = await tokenRequest(`http://www.kuwo.cn/api/www/search/searchKey?key=${encodeURIComponent(str)}`) this.requestObj = await tokenRequest(`http://www.kuwo.cn/api/www/search/searchKey?key=${encodeURIComponent(str)}`)
return this.requestObj.promise.then(({ body }) => { return this.requestObj.promise.then(({ body }) => {
// console.log(body) // console.log(body)
@ -23,10 +21,10 @@ export default {
return matchResult ? decodeName(matchResult[1]) : '' return matchResult ? decodeName(matchResult[1]) : ''
}) })
}, },
cancelTempSearch() { cancelTipSearch() {
if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp() if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp()
}, },
async search(str) { async search(str) {
return this.tempSearch(str).then(result => this.handleResult(result.data)) return this.tipSearchBySong(str).then(result => this.handleResult(result.data))
}, },
} }

View File

@ -6,8 +6,10 @@ import pic from './pic'
import lyric from './lyric' import lyric from './lyric'
import hotSearch from './hotSearch' import hotSearch from './hotSearch'
import comment from './comment' import comment from './comment'
import tipSearch from './tipSearch'
const mg = { const mg = {
tipSearch,
songList, songList,
musicSearch, musicSearch,
leaderboard, leaderboard,

View File

@ -0,0 +1,25 @@
import { createHttpFetch } from './util'
export default {
requestObj: null,
cancelTipSearch() {
if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp()
},
tipSearchBySong(str) {
this.cancelTipSearch()
this.requestObj = createHttpFetch(`https://music.migu.cn/v3/api/search/suggest?keyword=${encodeURIComponent(str)}`, {
headers: {
referer: 'https://music.migu.cn/v3',
},
})
return this.requestObj.then(body => {
return body.songs
})
},
handleResult(rawData) {
return rawData.map(info => `${info.name} - ${info.singerName}`)
},
async search(str) {
return this.tipSearchBySong(str).then(result => this.handleResult(result))
},
}

View File

@ -15,6 +15,15 @@ export const createHttpFetch = async(url, options, retryNum = 0) => {
console.log(err) console.log(err)
return createHttpFetch(url, options, ++retryNum) return createHttpFetch(url, options, ++retryNum)
} }
if (result.statusCode !== 200 || result.body.code !== '000000') return createHttpFetch(url, options, ++retryNum) if (result.statusCode !== 200 ||
if (result.body) return result.body (
(result.body.code !== undefined
? result.body.code
: result.body.returnCode !== undefined
? result.body.returnCode
: result.body.code
) !== '000000')
) return createHttpFetch(url, options, ++retryNum)
if (result.body.data) return result.body.data
return result.body
} }

View File

@ -5,10 +5,10 @@ import musicSearch from './musicSearch'
import { apis } from '../api-source' import { apis } from '../api-source'
import hotSearch from './hotSearch' import hotSearch from './hotSearch'
import comment from './comment' import comment from './comment'
import tempSearch from './tempSearch' import tipSearch from './tipSearch'
const tx = { const tx = {
tempSearch, tipSearch,
leaderboard, leaderboard,
songList, songList,
musicSearch, musicSearch,

View File

@ -1,16 +1,12 @@
import { httpFetch } from '../../request' import { httpFetch } from '../../request'
export default { export default {
regExps: {
relWord: /RELWORD=(.+)/,
},
requestObj: null, requestObj: null,
cancelTempSearch() { cancelTipSearch() {
if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp() if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp()
}, },
tempSearch(str) { tipSearchBySong(str) {
this.cancelTempSearch() this.cancelTipSearch()
this.requestObj = httpFetch(`https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?_=1682514997109&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&hostUin=0&is_xml=0&key=${encodeURIComponent(str)}`, { this.requestObj = httpFetch(`https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?_=1682514997109&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=5381&g_tk=5381&hostUin=0&is_xml=0&key=${encodeURIComponent(str)}`, {
headers: { headers: {
origin: 'https://y.qq.com/', origin: 'https://y.qq.com/',
@ -19,13 +15,13 @@ export default {
}) })
return this.requestObj.promise.then(({ statusCode, body }) => { return this.requestObj.promise.then(({ statusCode, body }) => {
if (statusCode != 200 || body.code != 0) return Promise.reject(new Error('请求失败')) if (statusCode != 200 || body.code != 0) return Promise.reject(new Error('请求失败'))
return body.data return body.data.song.itemlist
}) })
}, },
handleResult(rawData) { handleResult(rawData) {
return rawData.map(info => `${info.name} - ${info.singer}`) return rawData.map(info => `${info.name} - ${info.singer}`)
}, },
async search(str) { async search(str) {
return this.tempSearch(str).then(result => this.handleResult(result.song.itemlist)) return this.tipSearchBySong(str).then(result => this.handleResult(result))
}, },
} }

View File

@ -6,8 +6,10 @@ import musicSearch from './musicSearch'
import songList from './songList' import songList from './songList'
import hotSearch from './hotSearch' import hotSearch from './hotSearch'
import comment from './comment' import comment from './comment'
import tipSearch from './tipSearch'
const wy = { const wy = {
tipSearch,
leaderboard, leaderboard,
musicSearch, musicSearch,
songList, songList,

View File

@ -0,0 +1,33 @@
import { httpFetch } from '../../request'
import { weapi } from './utils/crypto'
import { getSingerName } from '../../index'
export default {
requestObj: null,
cancelTipSearch() {
if (this.requestObj && this.requestObj.cancelHttp) this.requestObj.cancelHttp()
},
tipSearchBySong(str) {
this.cancelTipSearch()
this.requestObj = httpFetch('https://music.163.com/weapi/search/suggest/web', {
method: 'POST',
headers: {
referer: 'https://music.163.com/',
origin: 'https://music.163.com/',
},
form: weapi({
s: str,
}),
})
return this.requestObj.promise.then(({ statusCode, body }) => {
if (statusCode != 200 || body.code != 200) return Promise.reject(new Error('请求失败'))
return body.result.songs
})
},
handleResult(rawData) {
return rawData.map(info => `${info.name} - ${getSingerName(info.artists, 'name')}`)
},
async search(str) {
return this.tipSearchBySong(str).then(result => this.handleResult(result))
},
}