chore: update search scripts, extra sources and post drafts
Adds the one-off scripts accumulated across recent sessions, removes temp scripts whose searches now live in config.ts as role-family sweeps, and updates fetch-other.ts plus the LinkedIn post drafts.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { KEYWORDS } from "../config.ts";
|
||||
import type { SearchConfig } from "../config.ts";
|
||||
import { fetchJobs, isEnglishContent } from "../fetch.ts";
|
||||
import { readFileSync } from "fs";
|
||||
|
||||
const csv = readFileSync("./results/jobs.csv", "utf8");
|
||||
const existingIds = new Set(
|
||||
[...csv.matchAll(/jobs\/view\/(\d+)\//g)].map((m) => m[1])
|
||||
);
|
||||
|
||||
const searches: SearchConfig[] = [
|
||||
{ label: "Switzerland (all)", keywords: KEYWORDS, location: "Switzerland", workType: ["onsite", "hybrid", "remote"], timePosted: "month" },
|
||||
{ label: "Zürich Area", keywords: KEYWORDS, geoId: "90009888", location: "Zürich Area", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Basel Metro", keywords: KEYWORDS, geoId: "90009885", location: "Basel Metropolitan Area", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Bern", keywords: KEYWORDS, location: "Bern, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Geneva", keywords: KEYWORDS, location: "Geneva, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Lausanne", keywords: KEYWORDS, location: "Lausanne, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Zug", keywords: KEYWORDS, location: "Zug, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Lucerne", keywords: KEYWORDS, location: "Lucerne, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "St. Gallen", keywords: KEYWORDS, location: "St. Gallen, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
{ label: "Lugano", keywords: KEYWORDS, location: "Lugano, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
];
|
||||
|
||||
const seen = new Map<string, any>();
|
||||
for (const s of searches) {
|
||||
const jobs = await fetchJobs(s);
|
||||
for (const j of jobs) if (!seen.has(j.id) && !existingIds.has(j.id)) seen.set(j.id, j);
|
||||
console.log(`${s.label}: ${jobs.length} raw, ${seen.size} unique new so far`);
|
||||
}
|
||||
|
||||
const MS_RE = /\b(\.net|c#|azure|sharepoint|dynamics|power\s?(bi|platform|apps)|sccm|intune|windows)\b/i;
|
||||
const candidates = [...seen.values()].filter((j) => !MS_RE.test(j.title));
|
||||
|
||||
console.log(`\n${candidates.length} candidates. Checking English content…\n`);
|
||||
const results = [];
|
||||
for (const j of candidates) {
|
||||
const ok = await isEnglishContent(j.id);
|
||||
if (ok) results.push(j);
|
||||
else console.log(` dropped (non-English): ${j.title}`);
|
||||
}
|
||||
|
||||
console.log(`\n=== ${results.length} NEW SWISS JOBS ===\n`);
|
||||
for (const j of results) {
|
||||
console.log(`${j.title} | ${j.company} | ${j.location} | ${j.postedAt}`);
|
||||
console.log(` ${j.link}`);
|
||||
}
|
||||
Reference in New Issue
Block a user