UNPKG

job-hoarder

Version:

Job board aggregator to pull in standardized job postings from company job pages

84 lines (83 loc) 3.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var cheerio_1 = __importDefault(require("cheerio")); var IndeedParser = /** @class */ (function () { function IndeedParser(host, excludeSponsored) { var _this = this; /** * Parse jobs from request result * @param {string} data String of jobs * @returns {array} List of parsed jobs */ this.parseJobs = function (body) { if (!body) throw new Error('No jobs to parse'); var $ = cheerio_1.default.load(body); var jobTable = $('#resultsCol'); var jobs = jobTable.find('.result'); var cont = true; // Filter out ads var filtered = _this.excludeSponsored ? jobs.filter(function (_, e) { var job = $(e); var isSponsored = job.find('.jobsearch-SerpJobCard-footer span:contains("sponsored")'); return isSponsored == null; }) : jobs; // Create objects var jobObjects = filtered .map(function (i, e) { var _a; var job = $(e); var id = (_a = job.attr('id')) === null || _a === void 0 ? void 0 : _a.trim().split('_')[1]; var title = job.find('.jobtitle').text().trim(); var url = 'https://' + _this.host + job.find('.jobtitle').attr('href'); var company = job.find('.company').text().trim() || null; var companyUrl = job.find('.company a[data-tn-element="companyName"]').attr('href'); var jobLocation = job.find('.location').text().trim(); // TODO: Make date field var datePosted = job.find('.date').text().trim(); var salary = job.find('.salary.no-wrap').text().trim(); return { id: id, title: title, url: url, company: company, companyUrl: companyUrl, jobLocation: jobLocation, datePosted: datePosted, salary: salary, }; }) .get(); if (jobTable.children().hasClass('dupetext')) { // We haven't seen all the results but indeed says the rest are duplicates cont = false; } else if ($('.pagination > *:last-child').hasClass('np')) { // We have seen all the results cont = false; } return { continue: cont, jobs: jobObjects, }; }; /** * Parses job from request result * @param {string} data String of job result * @returns {object} Object of parsed job */ this.parseJob = function (data) { // TODO: Implement parse job throw new Error('Function not implemented: Indeed.parseJob'); }; this.host = host; this.excludeSponsored = excludeSponsored; } return IndeedParser; }()); exports.default = IndeedParser;