nodelink / src /sources /genius.js
flameface's picture
Upload 25 files
b58c6cb verified
import { makeRequest } from '../utils.js'
async function search(query) {
const { body: data } = await makeRequest(`https://genius.com/api/search/multi?q=${encodeURIComponent(query)}`, {
method: 'GET'
})
if (data.response.sections[1].hits.length === 0) return null
return data.response.sections[1].hits[0].result.path
}
async function loadLyrics(decodedTrack, language) {
const searchResult = await search(`${decodedTrack.title} ${decodedTrack.author}`)
if (!searchResult) return null
const { body: data } = await makeRequest(`https://genius.com${searchResult}`, {
method: 'GET'
})
const trackInfo = JSON.parse(data.match(/JSON.parse\('(.*)'\);/)[1].replace(/\\(.)/g, '$1'))
const lyricsEvents = []
trackInfo.songPage.lyricsData.body.children[0].children.forEach((text) => {
if (typeof text === 'object') {
if (!text.children) return;
text.children.forEach((child) => {
if (typeof child !== 'string') return;
lyricsEvents.push({
text: child
})
})
return;
}
lyricsEvents.push({
text
})
})
return {
loadType: 'lyricsSingle',
data: {
name: 'original',
synced: false,
data: lyricsEvents,
rtl: false
}
}
}
export default {
loadLyrics
}