49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
const axios = require("axios");
|
|
const config = require("./config/config.json");
|
|
const $ = require('cheerio');
|
|
const { Collection } = require("discord.js");
|
|
|
|
class Genius {
|
|
search_song(q, callback) {
|
|
axios({
|
|
method: "get",
|
|
url: "https://api.genius.com/search?q=" + q,
|
|
headers: {'Authorization': 'Bearer ' + config["genius-token"]}
|
|
}).then(response => {
|
|
return callback(response.data.response.hits[0].result);
|
|
}).catch(err => {
|
|
console.error(err);
|
|
})
|
|
}
|
|
|
|
get_lyrics(song_id, use_mobile, callback) {
|
|
axios({
|
|
method: "get",
|
|
url: "https://api.genius.com/songs/" + song_id,
|
|
headers: {'Authorization': 'Bearer ' + config["genius-token"]}
|
|
}).then(response => {
|
|
axios({
|
|
method: "get",
|
|
url: response.data.response.song.url,
|
|
headers: { "User-Agent": use_mobile ? "Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" }
|
|
}).then(response => {
|
|
const texts = $("div.lyrics > p", response.data)["0"].children;
|
|
let lyrics;
|
|
texts.forEach(element => {
|
|
if (element.type === 'text') lyrics += element.data;
|
|
else if (element.children[0]) {
|
|
element.children.forEach(children => {
|
|
if (children.data) lyrics += children.data;
|
|
if (children.children) if (children.children[0]) lyrics += children.children[0].data;
|
|
});
|
|
}
|
|
});
|
|
return callback(null, lyrics);
|
|
}).catch(err => {
|
|
return callback(err);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = new Genius(); |