mirror of
https://github.com/FranP-code/spooky-spotify-showcase.git
synced 2025-10-13 00:02:36 +00:00
Placeholder data option
This commit is contained in:
62
src/app/utils/getSpotifyData.ts
Normal file
62
src/app/utils/getSpotifyData.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import SpotifyWebApi from "spotify-web-api-node";
|
||||
import { FETCH_ARTISTS_LIMIT, FETCH_TRACKS_LIMIT } from "./contants";
|
||||
import { TrackByAlbum } from "../_components/spotify-data";
|
||||
|
||||
export const getSpotifyData = async ({
|
||||
accessToken,
|
||||
}: {
|
||||
accessToken: string;
|
||||
}) => {
|
||||
const spotifyApi = new SpotifyWebApi({
|
||||
clientId: process.env.SPOTIFY_CLIENT_ID,
|
||||
clientSecret: process.env.SPOTIFY_CLIENT_SECRET,
|
||||
redirectUri: process.env.SPOTIFY_REDIRECT_URI,
|
||||
});
|
||||
spotifyApi.setAccessToken(accessToken);
|
||||
|
||||
const [artistsData, tracksData, userData] = await Promise.all([
|
||||
spotifyApi.getMyTopArtists({
|
||||
limit: FETCH_ARTISTS_LIMIT,
|
||||
time_range: "short_term",
|
||||
}),
|
||||
spotifyApi.getMyTopTracks({
|
||||
limit: FETCH_TRACKS_LIMIT,
|
||||
time_range: "short_term",
|
||||
}),
|
||||
spotifyApi.getMe(),
|
||||
]);
|
||||
|
||||
const artists = artistsData.body.items;
|
||||
const tracks = tracksData.body.items.map((track, i) => ({
|
||||
...track,
|
||||
position: i + 1,
|
||||
}));
|
||||
|
||||
const tracksByAlbum = tracksData.body.items.reduce(
|
||||
(acc: Record<string, TrackByAlbum>, track) => {
|
||||
if (!acc[track.album.id]) {
|
||||
const tracksWithAlbum = tracks.filter(
|
||||
(t) => t.album.id === track.album.id,
|
||||
);
|
||||
acc[track.album.id] = {
|
||||
album: track.album,
|
||||
position:
|
||||
tracksWithAlbum.reduce(
|
||||
(acc, _track) => FETCH_TRACKS_LIMIT / _track.position + acc,
|
||||
0,
|
||||
) / tracksWithAlbum.length,
|
||||
tracks: [],
|
||||
};
|
||||
}
|
||||
(acc[track.album.id] || ({ tracks: [] } as any)).tracks.push(track);
|
||||
return acc;
|
||||
},
|
||||
{},
|
||||
);
|
||||
|
||||
return {
|
||||
userData,
|
||||
tracksByAlbum,
|
||||
artists,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user