job-scraper
Version:
An api that returns job prospect data scraped from indeed and monster
92 lines (73 loc) • 4.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _jquery = require('jquery');
var _jquery2 = _interopRequireDefault(_jquery);
var _htmlUtility = require('./html-utility');
var _jobProspect = require('./job-prospect');
var _indeedParser = require('./indeed-parser');
var _indeedParser2 = _interopRequireDefault(_indeedParser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Scraper = function () {
function Scraper(jobTitle, city, state) {
var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
_classCallCheck(this, Scraper);
this.jobTitle = jobTitle.replace(/ /g, '+').replace(/,/g, '%2C');
this.city = city.replace(/ /g, '+').replace(/,/g, '%2C');
this.state = state.replace(/ /g, '+').replace(/,/g, '%2C');
this.type = type;
this.query = 'http://allorigins.me/get?url=https%3A//www.indeed.com/jobs%3Fq%3D' + this.jobTitle + '%26l%3D' + this.city + '%252C+' + this.state + '&callback=?';
}
_createClass(Scraper, [{
key: 'init',
value: function init() {
var _this = this;
return _jquery2.default.getJSON(this.query).then(function (data) {
return data.contents.split('data-tn-component="organicJob"').map(function (el) {
return el.replace(/\n/g, '');
}).map(function (el) {
var prospect = new _jobProspect.JobProspect(_indeedParser2.default.getCompany(el), _indeedParser2.default.getLocation(el), _indeedParser2.default.getDate(el), _indeedParser2.default.getTitle(el), _indeedParser2.default.getUrl(el), null, _indeedParser2.default.getTruncation(el), el);
_indeedParser2.default.setDescription(el, _this.query, prospect);
return prospect;
});
}).catch(function (err) {
throw err;
});
}
}, {
key: 'renderCards',
value: function renderCards(arr) {
var el = document.getElementById('job-scraper-box');
var preHtml = '<div class="job-scraper__modal-veil">\n <div class="job-scraper__modal-wrapper">\n <div class="job-scraper__modal-header">\n <p><span class="job-scraper__close-box">X</span></p>\n <p class="job-scraper__company"></p>\n <hr />\n <p class="job-scraper__title"></p>\n <p class="job-scraper__location"></p>\n <p class="job-scraper__date"></p>\n <p>. . .</p>\n </div>\n <div class="job-scraper__modal-container">\n </div>\n <div class="job-scraper__modal-footer">\n <a class="job-scraper__modal-apply" target="_blank">Apply to Job</a>\n </div>\n </div>\n </div>';
el.insertAdjacentHTML('beforebegin', preHtml);
_htmlUtility.HtmlUtility.cache = {
modal: document.getElementsByClassName('job-scraper__modal-veil')[0],
company: document.getElementsByClassName('job-scraper__company')[0],
job: document.getElementsByClassName('job-scraper__title')[0],
location: document.getElementsByClassName('job-scraper__location')[0],
date: document.getElementsByClassName('job-scraper__date')[0],
content: document.getElementsByClassName('job-scraper__modal-container')[0],
data: arr,
apply: document.getElementsByClassName('job-scraper__modal-apply')[0]
};
var html = '<div class="job-scraper__items-container">' + arr.map(_htmlUtility.HtmlUtility.produceCard).join('') + '</div>';
el.insertAdjacentHTML('beforebegin', html);
el.parentElement.removeChild(el);
var cardButtons = document.getElementsByClassName('job-scraper__item-button');
var closeModalButton = document.getElementsByClassName('job-scraper__close-box')[0];
closeModalButton.addEventListener('click', function () {
_htmlUtility.HtmlUtility.closeModal();
});
for (var i = 0; i < cardButtons.length; i++) {
cardButtons[i].addEventListener('click', function (e) {
_htmlUtility.HtmlUtility.triggerModal(e.srcElement);
});
}
}
}]);
return Scraper;
}();
exports.default = Scraper;