facebook-event-scraper-fetch
Version:
A slim module for scraping Facebook event data in milliseconds.
104 lines (103 loc) • 4.34 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateAndFormatEventGroupUrl = exports.validateAndFormatEventProfileUrl = exports.validateAndFormatEventPageUrl = exports.validateAndFormatUrl = exports.fbidToUrl = void 0;
const enums_1 = require("../enums");
const fbidToUrl = (fbid) => {
if (!fbid.match(/^[0-9]{8,}$/)) {
throw new Error('Invalid FB ID');
}
return `https://www.facebook.com/events/${fbid}?_fb_noscript=1`;
};
exports.fbidToUrl = fbidToUrl;
// Covers events with the following format:
// https://www.facebook.com/events/666594420519340/
// https://www.facebook.com/events/shark-tank-pub/80s-90s-00s-night/2416437368638666/
// https://www.facebook.com/events/1137956700212933/1137956706879599/ (recurring events)
const validateAndFormatUrl = (url) => {
var _a;
const fbid = (_a = url.match(/facebook\.com\/events\/(?:.+\/.+\/)?([0-9]{8,})/)) === null || _a === void 0 ? void 0 : _a[1];
if (!fbid) {
throw new Error('Invalid Facebook event URL');
}
return `https://www.facebook.com/events/${fbid}?_fb_noscript=1`;
};
exports.validateAndFormatUrl = validateAndFormatUrl;
// Covers pages with the following format:
// https://www.facebook.com/lacalle8prague/past_hosted_events
// https://www.facebook.com/lacalle8prague/upcoming_hosted_events
// https://www.facebook.com/lacalle8prague/events
const validateAndFormatEventPageUrl = (url, type) => {
const regex = /facebook\.com\/[a-zA-Z0-9]+(?:\/(past_hosted_events|upcoming_hosted_events|events))?$/;
const result = regex.test(url);
if (!result) {
throw new Error('Invalid Facebook page event URL');
}
const types = /(past_hosted_events|upcoming_hosted_events|events)$/;
if (!types.test(url)) {
if (type === enums_1.EventType.Past) {
url += '/past_hosted_events';
}
else if (type === enums_1.EventType.Upcoming) {
url += '/upcoming_hosted_events';
}
else {
url += '/events';
}
}
else if (type === enums_1.EventType.Past) {
url = url.replace(types, 'past_hosted_events');
}
else if (type === enums_1.EventType.Upcoming) {
url = url.replace(types, 'upcoming_hosted_events');
}
return `${url}?_fb_noscript=1`;
};
exports.validateAndFormatEventPageUrl = validateAndFormatEventPageUrl;
// Covers pages with the following format:
// https://www.facebook.com/profile.php?id=61553164865125&sk=events
// https://www.facebook.com/profile.php?id=61564982700539
// https://www.facebook.com/profile.php?id=61564982700539&sk=past_hosted_events
// https://www.facebook.com/profile.php?id=61564982700539&sk=upcoming_hosted_events
const validateAndFormatEventProfileUrl = (url, type) => {
const regex = /facebook\.com\/profile\.php\?id=\d+(&sk=(events|past_hosted_events|upcoming_hosted_events))?$/;
const result = regex.test(url);
if (!result) {
throw new Error('Invalid Facebook profile event URL');
}
const types = /(past_hosted_events|upcoming_hosted_events|events)$/;
if (!types.test(url)) {
if (type === enums_1.EventType.Past) {
url += '&sk=past_hosted_events';
}
else if (type === enums_1.EventType.Upcoming) {
url += '&sk=upcoming_hosted_events';
}
else {
url += '&sk=events';
}
}
else if (type === enums_1.EventType.Past) {
url = url.replace(types, 'past_hosted_events');
}
else if (type === enums_1.EventType.Upcoming) {
url = url.replace(types, 'upcoming_hosted_events');
}
return url;
};
exports.validateAndFormatEventProfileUrl = validateAndFormatEventProfileUrl;
// Covers pages with the following format:
// https://www.facebook.com/groups/409785992417637/events
// https://www.facebook.com/groups/409785992417637
// https://www.facebook.com/groups/zoukcr
const validateAndFormatEventGroupUrl = (url) => {
const regex = /facebook\.com\/groups\/[a-zA-Z0-9]+(?:\/events$)?/;
const result = regex.test(url);
if (!result) {
throw new Error('Invalid Facebook group event URL');
}
if (!url.match('/events')) {
url += '/events';
}
return `${url}?_fb_noscript=1`;
};
exports.validateAndFormatEventGroupUrl = validateAndFormatEventGroupUrl;
;