54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
|
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);
|
||
|
}
|