job-hoarder
Version:
Job board aggregator to pull in standardized job postings from company job pages
84 lines (83 loc) • 3.4 kB
JavaScript
;
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;