UNPKG

bandcamp-fetch

Version:
70 lines 3.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; 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"); const ObjectHelper_js_1 = __importDefault(require("../utils/ObjectHelper.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)($('#HomepageApp[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 username = ObjectHelper_js_1.default.getProperty(parsed, 'pageContext.identity.fanUsername'); if (!username || typeof username !== 'string') { let reason; if (username === 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}.`, parsed); } return username; } } exports.default = FanInfoParser; //# sourceMappingURL=FanInfoParser.js.map