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,34 @@
|
||||
// Re-runs the one search that returned HTTP 500 during the full fetch and
|
||||
// appends its survivors to results/jobs.csv in the same format as index.ts.
|
||||
import { RESEARCH_KEYWORDS } from "../config.ts";
|
||||
import { fetchJobs, isEnglishContent } from "../fetch.ts";
|
||||
import type { SearchConfig } from "../config.ts";
|
||||
|
||||
const CSV = "./results/jobs.csv";
|
||||
const config: SearchConfig = {
|
||||
label: "Research — Zürich Metropolitan Area",
|
||||
keywords: RESEARCH_KEYWORDS,
|
||||
geoId: "107814425",
|
||||
location: "Zürich Metropolitan Area",
|
||||
workType: ["onsite", "hybrid"],
|
||||
timePosted: "month",
|
||||
};
|
||||
|
||||
function csvCell(val: string): string {
|
||||
return `"${(val ?? "").replace(/"/g, '""')}"`;
|
||||
}
|
||||
|
||||
const text = await Bun.file(CSV).text();
|
||||
const seen = new Set(
|
||||
text.split("\n").map((l) => l.match(/jobs\/view\/(\d+)/)?.[1]).filter(Boolean) as string[]
|
||||
);
|
||||
|
||||
const date = new Date().toISOString().slice(0, 10);
|
||||
const jobs = (await fetchJobs(config)).filter((j) => !seen.has(j.id));
|
||||
const rows: string[] = [];
|
||||
for (const j of jobs) {
|
||||
if (!(await isEnglishContent(j.id))) continue;
|
||||
rows.push([date, j.postedAt, config.label, j.title, j.company, j.link, "linkedin.com"].map(csvCell).join(","));
|
||||
}
|
||||
await Bun.write(CSV, text.trimEnd() + "\n" + rows.join("\n") + "\n");
|
||||
console.log(`${rows.length} appended → ${CSV}`);
|
||||
Reference in New Issue
Block a user