bandcamp-fetch
Version:
Scrape Bandcamp content
67 lines • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cheerio_1 = require("cheerio");
const html_entities_1 = require("html-entities");
const Parse_js_1 = require("../utils/Parse.js");
class FanInfoParser {
static parseInfo(html, opts) {
const $ = (0, cheerio_1.load)(html);
const blob = (0, html_entities_1.decode)($('#pagedata[data-blob]').attr('data-blob'));
let parsed;
try {
parsed = JSON.parse(blob);
}
catch (error) {
throw new Parse_js_1.ParseError('Failed to parse fan info: JSON error in data-blob.', html, error);
}
const fanData = parsed.fan_data || {};
const fanId = fanData.fan_id;
if (!fanId || !fanData.name || !fanData.username) {
throw new Parse_js_1.ParseError('Failed to parse fan info: invalid data.', html);
}
const result = {
type: 'fan',
name: fanData.name || null,
username: fanData.username || null,
url: fanData.trackpipe_url,
description: fanData.bio || null,
location: fanData.location || null,
websiteUrl: fanData.website_url || null,
imageUrl: '',
followingGenresCount: fanData.following_genres_count || 0,
followingArtistsAndLabelsCount: fanData.following_bands_count || 0,
collectionItemCount: parsed.collection_data?.item_count || 0,
wishlistItemCount: parsed.wishlist_data?.item_count || 0
};
if (fanData.photo && fanData.photo.image_id && opts.imageFormat?.id) {
result.imageUrl = `${opts.imageBaseUrl}/img/${fanData.photo.image_id}_${opts.imageFormat.id}.jpg`;
}
return result;
}
static parseLoggedInFanUsername(html) {
const $ = (0, cheerio_1.load)(html);
const blob = (0, html_entities_1.decode)($('#pagedata[data-blob]').attr('data-blob'));
let parsed;
try {
parsed = JSON.parse(blob);
}
catch (error) {
throw new Parse_js_1.ParseError('Failed to parse logged-in fan username: JSON error in data-blob.', html, error);
}
const identitiesData = parsed.identities || {};
const username = identitiesData.fan?.username;
if (!username || typeof username !== 'string') {
let reason;
if (identitiesData.fan === null) {
reason = 'check if valid cookie is set';
}
else {
reason = 'invalid data';
}
throw new Parse_js_1.ParseError(`Failed to parse logged-in fan username: ${reason}.`, html);
}
return username;
}
}
exports.default = FanInfoParser;
//# sourceMappingURL=FanInfoParser.js.map