const fetch = require('node-fetch'); const allSettled = require('promise.allsettled'); const lastfm = 'http://ws.audioscrobbler.com/2.0/' const quality = 3; allSettled.shim(); async function asklastfm(apikey, query) { try { let url = `${lastfm}?format=json&api_key=${apikey}&${query}`; let res = await fetch(url); return res.json(); } catch(e) { console.log(query); throw e; } } async function getalbum(apikey, elem) { let query, info = undefined; if (elem['album'] !== undefined) { query =`method=album.getinfo&artist=${encodeURIComponent(elem['artist'])}&album=${encodeURIComponent(elem['album'])}`; info = await asklastfm(apikey, query); } else if (elem['track'] !== undefined) { query =`method=track.getinfo&artist=${encodeURIComponent(elem['artist'])}&track=${encodeURIComponent(elem['track'])}`; info = (await asklastfm(apikey, query))['track'] } if (info !== undefined) { return info['album']; } else { return undefined; } } exports.updatecovers = async function (apikey, list) { let promises = list.map(async elem => { if (!elem.cover) { let info = await getalbum(apikey, elem); if (typeof info === 'object' && info['image'] instanceof Array) { let count = info['image'].length; let index = count > quality ? quality : count; let image = info['image'][index]['#text']; if (image) { elem['cover'] = image; } } } return elem; }); return Promise.allSettled(promises); }