mirror of
https://github.com/GiriNeko/YesPlayMusic.git
synced 2025-12-18 06:07:48 +00:00
feat: updates
This commit is contained in:
parent
0b4baa3eff
commit
222fb02355
77 changed files with 654 additions and 551 deletions
|
|
@ -1,84 +1,56 @@
|
|||
import { logger } from '@sentry/utils'
|
||||
import log from './log'
|
||||
import axios from 'axios'
|
||||
|
||||
// 'https://mvod.itunes.apple.com/itunes-assets/HLSMusic116/v4/de/52/95/de52957b-fcf1-ae96-b114-0445cb8c41d4/P359420813_default.m3u8'
|
||||
|
||||
const searchAlbum = async (
|
||||
keyword: string
|
||||
): Promise<
|
||||
| {
|
||||
id: string
|
||||
href: string
|
||||
attributes: {
|
||||
artistName: string
|
||||
url: string
|
||||
name: string
|
||||
editorialNotes?: {
|
||||
standard: string
|
||||
short: string
|
||||
}
|
||||
}
|
||||
}
|
||||
| undefined
|
||||
> => {
|
||||
const r = await axios.get(
|
||||
`https://amp-api.music.apple.com/v1/catalog/cn/search`,
|
||||
{
|
||||
params: {
|
||||
term: keyword,
|
||||
l: 'zh-cn',
|
||||
platform: 'web',
|
||||
types: 'albums',
|
||||
limit: 1,
|
||||
},
|
||||
headers: {
|
||||
authorization: 'Bearer xxxxxx', // required token
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
return r.data?.results?.albums?.data?.[0]
|
||||
}
|
||||
const token =
|
||||
'Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IldlYlBsYXlLaWQifQ.eyJpc3MiOiJBTVBXZWJQbGF5IiwiaWF0IjoxNjQ2NjU1MDgwLCJleHAiOjE2NjIyMDcwODB9.pyOrt2FmP0cHkzYtO8KiEzQL2t1qpRszzxIYbLH7faXSddo6PQei771Ja3aGwGVU4hD99lZAw7bwat60iBcGiQ'
|
||||
|
||||
export const getCoverVideo = async ({
|
||||
name,
|
||||
artists,
|
||||
artist,
|
||||
}: {
|
||||
name: string
|
||||
artists: string[]
|
||||
artist: string
|
||||
}): Promise<string | undefined> => {
|
||||
const keyword = `${artists.join(' ')} ${name}`
|
||||
logger.debug(`[appleMusic] getCoverVideo: ${keyword}`)
|
||||
const album = await searchAlbum(keyword).catch(e => {
|
||||
console.log(e)
|
||||
logger.debug('[appleMusic] Search album error', e)
|
||||
const keyword = `${artist} ${name}`
|
||||
log.debug(`[appleMusic] getCoverVideo: ${keyword}`)
|
||||
const searchResult = await axios({
|
||||
method: 'GET',
|
||||
url: 'https://amp-api.music.apple.com/v1/catalog/us/search',
|
||||
params: {
|
||||
term: keyword,
|
||||
types: 'albums',
|
||||
'fields[albums]': 'artistName,name,editorialVideo',
|
||||
platform: 'web',
|
||||
limit: '1',
|
||||
},
|
||||
headers: {
|
||||
Authority: 'amp-api.music.apple.com',
|
||||
Accept: '*/*',
|
||||
Authorization: token,
|
||||
Referer: 'http://localhost:9000/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cider/1.5.1 Chrome/100.0.4896.160 Electron/18.3.3 Safari/537.36',
|
||||
'Accept-Encoding': 'gzip',
|
||||
},
|
||||
}).catch(e => {
|
||||
log.debug('[appleMusic] Search album error', e)
|
||||
})
|
||||
|
||||
const url = album?.attributes.url
|
||||
|
||||
if (!url) {
|
||||
logger.info('[appleMusic] no url')
|
||||
const album = searchResult?.data?.results?.albums?.data?.[0]
|
||||
if (!album) {
|
||||
log.debug('[appleMusic] No album found on apple music')
|
||||
return
|
||||
}
|
||||
log.debug(
|
||||
`[appleMusic] Got ${album?.id}: ${album?.attributes?.name} by ${album?.attributes?.artistName}`
|
||||
)
|
||||
|
||||
let { data: html } = await axios.get(url)
|
||||
if (!html) return
|
||||
|
||||
const regex =
|
||||
/<script type="fastboot\/shoebox" id="shoebox-media-api-cache-amp-music">(.*?)<\/script>/
|
||||
html = html
|
||||
.match(regex)[0]
|
||||
.replace(
|
||||
'<script type="fastboot/shoebox" id="shoebox-media-api-cache-amp-music">',
|
||||
''
|
||||
)
|
||||
.replace('</script>', '')
|
||||
html = JSON.parse(html)
|
||||
const data = JSON.parse(html[Object.keys(html)[1]])
|
||||
const m3u8 =
|
||||
data?.d?.[0]?.attributes?.editorialVideo?.motionSquareVideo1x1?.video
|
||||
|
||||
logger.debug(`[appleMusic] ${m3u8}`)
|
||||
|
||||
return m3u8
|
||||
const url = album?.attributes?.editorialVideo?.motionSquareVideo1x1?.video
|
||||
if (!url) {
|
||||
log.debug('[appleMusic] Album does not have video cover')
|
||||
}
|
||||
return url
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue