lastfm-wrapped/commands/retrieve.js

105 lines
3.0 KiB
JavaScript

import { callApi } from '../lib/lastfm.js'
import { hasData, mkSubDir, saveData } from '../lib/dataStore.js'
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
const retrieve = async (username, options) => {
callApi("user.getinfo", { user: username }).then((data) => {
saveData(username, "basic_info", data)
})
if (!options.basic) {
await retrieveTracks(username, options)
await retrieveAlbums(username, options)
await retrieveArtists(username, options)
}
}
const retrieveTracks = async (username, options) => {
let period = '12month'
if (options.full) {
period = 'overall'
}
let pages = 0;
mkSubDir(username, 'tracks')
if (hasData(username, "tracks/tracks-1")) {
console.log('already have tracks');
return;
}
console.log('downloading page 1 of ???')
let data = await callApi("user.getTopTracks", {
user: username
})
pages = data.toptracks['@attr'].totalPages
saveData(username, "tracks/tracks-1", data)
for (let i = 2; i <= pages; i++) {
await sleep(500)
console.log(`downloading page ${i} of ${pages}`)
let data = await callApi("user.getTopTracks", {
user: username,
page: i
})
saveData(username, `tracks/tracks-${i}`, data)
}
}
const retrieveAlbums = async (username, options) => {
let period = '12month'
if (options.full) {
period = 'overall'
}
let pages = 0;
mkSubDir(username, 'albums')
if (hasData(username, "albums/albums-1")) {
console.log('already have albums');
return;
}
console.log('downloading page 1 of ???')
let data = await callApi("user.getTopAlbums", {
user: username
})
pages = data.topalbums['@attr'].totalPages
saveData(username, "albums/albums-1", data)
for (let i = 2; i <= pages; i++) {
await sleep(500)
console.log(`downloading page ${i} of ${pages}`)
let data = await callApi("user.getTopAlbums", {
user: username,
page: i
})
saveData(username, `albums/albums-${i}`, data)
}
}
const retrieveArtists = async (username, options) => {
let period = '12month'
if (options.full) {
period = 'overall'
}
let pages = 0;
mkSubDir(username, 'artists')
if (hasData(username, "artists/artists-1")) {
console.log('already have artists');
return;
}
console.log('downloading page 1 of ???')
let data = await callApi("user.getTopArtists", {
user: username
})
pages = data.topartists['@attr'].totalPages
saveData(username, "artists/artists-1", data)
for (let i = 2; i <= pages; i++) {
await sleep(500)
console.log(`downloading page ${i} of ${pages}`)
let data = await callApi("user.getTopArtists", {
user: username,
page: i
})
saveData(username, `artists/artists-${i}`, data)
}
}
export default retrieve