UNPKG

@zougui/furaffinity

Version:

95 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.scraperUtils = void 0; const date_fns_1 = require("date-fns"); const utils_1 = require("../utils"); const dateFormats = [ 'MMM do, yyyy hh:mm aa', // Sep 27th, 2021 06:16 AM (standard) 'MMM do, yyyy, hh:mm aa', // Sep 27th, 2021, 06:16 AM (beta note) 'MMM do, yyyy hh:mmaa', // Sep 27, 2021 06:16AM (beta note list) ]; const reThumbnail = /^\/\/t\.facdn\.net\/(\d+)@(\d+)-(\d+)/; const readDateField = (field) => { if (!field) { return null; } // Strip out field prefix if (field.startsWith('on ')) { field = field.slice(3); } // Try all known date formats for (const format of dateFormats) { const parsedDate = (0, date_fns_1.parse)(field, format, new Date()); if ((0, date_fns_1.isValid)(parsedDate)) { return parsedDate; } } return null; }; exports.scraperUtils = { pickStaticValue: (value) => { return { selector: ':root', how: () => value, }; }, converter: (convert) => { return convert; }, pickFaUrl: (selector, attr) => { return { selector, attr, convert: utils_1.fixFaUrl, }; }, pickImage: (selector = 'img', attr = 'src') => { return exports.scraperUtils.pickFaUrl(selector, attr); }, pickLink: (selector = 'a') => { return exports.scraperUtils.pickFaUrl(selector, 'href'); }, pickHtml: (selector) => { return { selector, how: 'html', }; }, pickDateFromSpan: (selector) => { return { selector, how: (source) => { // scrape-it has bad typings const ss = source; const text = ss.text(); const title = ss.attr('title'); if (text) { const textVal = readDateField(text); if (textVal) { return textVal; } } if (title) { const attrVal = ss.attr('title'); if (!attrVal) { return null; } const titleVal = readDateField(attrVal); if (titleVal) { return titleVal; } } return null; }, }; }, pickFigureId: () => { return { attr: 'id', convert: (sid) => { return Number(sid.split('-')[1]); }, }; }, }; //# sourceMappingURL=scraperUtils.js.map