@zougui/furaffinity
Version:
95 lines • 2.76 kB
JavaScript
;
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