From ec825da178e1da61afb9929f147e973f1e7687c1 Mon Sep 17 00:00:00 2001 From: patrickkfkan Date: Sun, 7 Feb 2021 20:07:27 +0800 Subject: [PATCH] Fix fetching of track duration --- lib/parser.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 4743bc4..bee6d39 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -189,7 +189,7 @@ function parseAlbumInfo(html, opts) { position: track.position, name: track.item.name, url: trackUrl, - duration: track.item.duration_secs, + duration: getAdditionalPropertyValue(track.item, 'duration_secs'), streamUrl: _getStreamUrl(track.item.url) }); }); @@ -233,7 +233,7 @@ function parseTrackInfo(html, opts) { url: basic.url, imageUrl: opts.imageBaseUrl + '/img/a' + extra.art_id + '_' + opts.albumImageFormat.id + '.jpg', releaseDate: extra.current.release_date, - duration: basic.duration_secs, + duration: getAdditionalPropertyValue(basic, 'duration_secs'), streamUrl: extra.trackinfo && extra.trackinfo[0] && extra.trackinfo[0].file && extra.trackinfo[0].file['mp3-128'] ? extra.trackinfo[0].file['mp3-128'] : null, artist: { name: basic.byArtist.name, @@ -289,6 +289,16 @@ function parseTrackInfoFromAlbum(html, opts, trackPosition) { return track; } +function getAdditionalPropertyValue(o, propName) { + if (Array.isArray(o.additionalProperty)) { + const p = o.additionalProperty.find( prop => prop.name === propName ); + if (p && p.value !== undefined) { + return p.value; + } + } + return undefined; +} + function parseDiscography(html, opts) { const $ = cheerio.load(html);