spotify / lib /spotify.js
fast72's picture
Rename lib/spotify (1).js to lib/spotify.js
1e0117f verified
const axios = require("axios");
const client_id = "6dc6b46d39c24a078ff5946b1295bd81";
const client_secret = "f30d47e4b2ed46ec82ddc8e861e6cc99";
const basic = Buffer.from(`${client_id}:${client_secret}`).toString("base64");
const TOKEN_ENDPOINT = "https://accounts.spotify.com/api/token";
async function spotifyCreds() {
try {
const response = await axios.post(
TOKEN_ENDPOINT,
"grant_type=client_credentials", {
headers: {
Authorization: "Basic " + basic,
},
},
);
return {
status: true,
data: response.data,
};
} catch (error) {
return {
status: false,
msg: "Failed to retrieve Spotify credentials.",
};
}
}
const toTime = (ms) => {
let h = Math.floor(ms / 3600000);
let m = Math.floor(ms / 60000) % 60;
let s = Math.floor(ms / 1000) % 60;
return [h, m, s].map((v) => v.toString().padStart(2, "0")).join(":");
};
class Spotify {
search = async (query, type = "track", limit = 20) => {
try {
const creds = await spotifyCreds();
if (!creds.status) return creds;
const response = await axios.get(
`https://api.spotify.com/v1/search?query=${encodeURIComponent(query)}&type=${type}&offset=0&limit=${limit}`, {
headers: {
Authorization: "Bearer " + creds.data.access_token,
},
},
);
if (
!response.data[type + "s"] ||
!response.data[type + "s"].items.length
) {
return {
msg: "Music not found!",
};
}
return response.data[type + "s"].items.map((item) => ({
title: item.name,
id: item.id,
duration: toTime(item.duration_ms),
artist: item.artists.map((artist) => artist.name).join(" & "),
url: item.external_urls.spotify,
thumbnail: item.album.images[0]?.url,
//...item
}));
} catch (error) {
return {
status: false,
msg: "Error searching for music. " + error.message,
};
}
};
download = async (url) => {
const BASEURL = "https://api.fabdl.com";
const headers = {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36",
};
try {
const {
data: info
} = await axios.get(`${BASEURL}/spotify/get?url=${url}`, {
headers
});
const {
gid,
id,
name,
image,
duration_ms
} = info.result;
const {
data: download
} = await axios.get(`${BASEURL}/spotify/mp3-convert-task/${gid}/${id}`, {
headers
});
if (download.result.download_url) {
return {
title: name,
duration: duration_ms,
cover: image,
download: `${BASEURL}${download.result.download_url}`
}
}
} catch (error) {
console.error("Error downloading Spotify track:", error.message);
throw new Error(error.message);
}
};
playlist = async function playlist(url) {
try {
const id = url.split("/playlist/")[0].trim().split("?si=")[0].trim();
const {
data
} = await axios.get(
"https://api.spotifydown.com/trackList/playlist/0F1VNeiZKjtX06yrVSqlbu", {
headers: {
Accept: "*/*",
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0.1; SM-J500G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36",
Origin: "https://spotifydown.com",
Referer: "https://spotifydown.com/",
"Referrer-Policy": "strict-origin-when-cross-origin",
},
},
).catch(e => e.response);
if (!data.trackList) return []
return data.trackList.map((a) => ({
...a,
url: "https://open.spotify.com/track/" + a.id
}))
} catch (err) {
return []
}
}
}
module.exports = new Spotify();