taevas.xyz/netlify/functions/lastfm.ts

49 lines
1.3 KiB
TypeScript
Raw Normal View History

import {type Handler} from "@netlify/functions";
import {api} from "./shared/api.js";
import {type LastfmInfo} from "#Infos/Music/Lastfm.js";
2023-11-05 21:01:24 +01:00
const handler: Handler = async () => {
const lastfm = await api<{
recenttracks: {
2025-02-16 17:05:02 +01:00
track: {
artist: {
"#text": string;
};
2025-02-16 17:05:02 +01:00
image: {
size: string;
"#text": string;
2025-02-16 17:05:02 +01:00
}[];
album: {
"#text": string;
};
name: string;
"@attr"?: {
nowplaying?: string;
};
url: string;
date?: {
uts: string;
"#text": string;
};
2025-02-16 17:05:02 +01:00
}[];
};
2024-04-27 21:22:48 +02:00
}>(`http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=TTTaevas&api_key=${process.env.API_LASTFM}&format=json&limit=1`);
const image = lastfm.recenttracks.track[0].image.find((i) => i.size == "large");
2023-11-05 21:01:24 +01:00
const track: LastfmInfo = {
artist: lastfm.recenttracks.track[0].artist["#text"],
2023-05-07 22:35:19 +02:00
name: lastfm.recenttracks.track[0].name,
album: lastfm.recenttracks.track[0].album["#text"],
image: image ? image["#text"] : "",
listening: Boolean(lastfm.recenttracks.track[0]["@attr"]?.nowplaying),
url: lastfm.recenttracks.track[0].url,
date: lastfm.recenttracks.track[0].date?.uts ?? String(Date.now()),
};
2023-05-07 22:35:19 +02:00
return {
statusCode: 200,
body: JSON.stringify(track),
};
};
export {handler};