UNPKG

bandcamp-fetch

Version:
67 lines 2.81 kB
"use strict"; 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