bandcamp-fetch
Version:
Scrape Bandcamp content
102 lines • 3.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const FanItemsBaseParser_js_1 = __importDefault(require("./FanItemsBaseParser.js"));
class FanWishlistParser extends FanItemsBaseParser_js_1.default {
static parseWishlistFromPage(html, opts) {
return this.parsePageItems(html, {
...opts,
dataKey: 'wishlist',
parseItemFn: this.parseWishlistItem
});
}
static parseWishlistFromContinuation(json, continuation, opts) {
return this.parseContinuationItems(json, continuation, {
...opts,
dataKey: 'items',
parseItemFn: this.parseWishlistItem
});
}
static parseWishlistItem(data, opts, tracklists) {
if (!data) {
return null;
}
const _findInTrackLists = (tracklists, id) => {
if (!tracklists || typeof tracklists !== 'object') {
return null;
}
for (const tracks of Object.values(tracklists)) {
if (Array.isArray(tracks)) {
const track = tracks.find((t) => t.id === id);
if (track) {
return track;
}
}
}
};
let mediaItemType;
switch (data.tralbum_type) {
case 'a':
mediaItemType = 'album';
break;
case 't':
mediaItemType = 'track';
break;
default:
mediaItemType = null;
}
if (!mediaItemType) {
return null;
}
const mediaItem = {
type: mediaItemType,
id: data.item_id,
name: data.item_title,
url: data.item_url,
imageUrl: '',
artist: {
name: data.band_name
}
};
if (data.item_art_id && opts.imageFormat?.id) {
mediaItem.imageUrl = `${opts.imageBaseUrl}/img/a${data.item_art_id}_${opts.imageFormat.id}.jpg`;
}
if (data.url_hints && data.url_hints.subdomain && mediaItem.artist) {
mediaItem.artist.url = `https://${data.url_hints.subdomain}.bandcamp.com`;
}
const featuredTrackData = data.featured_track !== undefined ?
_findInTrackLists(tracklists, data.featured_track)
: null;
if (featuredTrackData) {
const duration = featuredTrackData.duration;
const streamUrl = featuredTrackData.file?.['mp3-128'];
const streamUrlHQ = featuredTrackData.file?.['mp3-v0'];
if (mediaItemType === 'album') {
const featuredTrack = {
id: featuredTrackData.id,
position: featuredTrackData.track_number,
name: featuredTrackData.title,
artist: featuredTrackData.artist,
duration,
streamUrl
};
if (streamUrlHQ) {
featuredTrack.streamUrlHQ = streamUrlHQ;
}
mediaItem.featuredTrack = featuredTrack;
}
else {
mediaItem.duration = duration;
mediaItem.streamUrl = streamUrl;
if (streamUrlHQ) {
mediaItem.streamUrlHQ = streamUrlHQ;
}
}
}
return mediaItem;
}
}
exports.default = FanWishlistParser;
//# sourceMappingURL=FanWishlistParser.js.map