-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathindex.js
More file actions
49 lines (42 loc) · 1.79 KB
/
index.js
File metadata and controls
49 lines (42 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
require('dotenv').config();
const { scrapeJobs } = require('./services/apifyService');
const { saveJobsToFile, readJobsFromFile } = require('./services/fileService');
const { readJobsFromSheet, writeJobToSheet } = require('./services/googleSheetsService');
const { filterUniqueJobs } = require('./services/jobUtils');
const { log } = require('./services/loggingService');
const { evaluateJobMatch } = require('./services/jobMatchEvaluator');
const candidateSummary = require('fs').readFileSync('./candidate_summary.txt', 'utf8');
const useDebugMode = process.env.DEBUG_MODE === "true";
async function main() {
log('INFO', 'Starting Job Scraper Workflow...');
try {
let jobs;
if (useDebugMode) {
jobs = readJobsFromFile("2025-01-27-jobs.json")
} else {
// Step 1: Scrape jobs
jobs = await scrapeJobs();
// Step 2: Save jobs to a JSON file
if (jobs.length > 0) {
saveJobsToFile(jobs);
} else {
log("WARN", "No jobs found. Skipping file saving step.");
}
}
// Step 3: Filter out duplicates
const sheetData = await readJobsFromSheet();
const existingJobs = sheetData.slice(1);
const uniqueJobs = filterUniqueJobs(existingJobs, jobs);
// Step 4: Write unique jobs to Google Sheets one by one
let writtenCount = 0;
for (const job of uniqueJobs) {
const jobAiResponses = await evaluateJobMatch(job, candidateSummary);
await writeJobToSheet(job, jobAiResponses);
writtenCount++;
}
log("INFO", `${writtenCount} unique jobs successfully written to Google Sheets.`);
} catch (error) {
log('ERROR', 'Workflow failed.', { error: error.message });
}
}
main();