Recettes
Suivi d'offres d'emploi
Suivre les nouvelles offres d'emploi à intervalle régulier et notifier dès leur apparition
Surveille un ensemble de pages carrières et notifie (Slack / email / Discord) dès qu'un nouveau poste correspondant à ton filtre est publié. Le même pattern fonctionne pour l'immobilier, les annonces sur les marketplaces ou tout signal "nouvel élément apparu".
JSON Schema
{
"type": "object",
"properties": {
"title": { "type": "string", "description": "Job title" },
"department": { "type": "string" },
"location": { "type": "string", "description": "City or 'Remote'" },
"url": { "type": "string", "description": "Canonical job posting URL" },
"postedAt": { "type": "string", "description": "ISO-8601 timestamp if shown" }
},
"required": ["title", "url"]
}Flux
- À intervalle régulier (cron / GitHub Actions), soumets les URLs des pages carrières à
/batch/extract - Reçois le Webhook à la fin
- Diff avec la dernière exécution — émets des notifications pour les nouvelles entrées
(url) - Filtre par mots-clés de titre / lieu avant de notifier
Esquisse d'implémentation
import httpx, json, pathlib
API = "https://openapi.thunderbit.com/openapi/v1"
H = {"Authorization": "Bearer YOUR_API_KEY"}
STATE = pathlib.Path("seen.json")
careers = [
"https://example.com/careers",
"https://example.org/jobs",
]
job = httpx.post(f"{API}/batch/extract",
headers=H,
json={"urls": careers, "schema": SCHEMA}).json()
# Poll or webhook (see Batch Job Lifecycle guide)
seen = set(json.loads(STATE.read_text())) if STATE.exists() else set()
new = []
for r in job["data"]["results"]:
if r["status"] != "SUCCEEDED": continue
for item in r.get("data", []):
if item["url"] not in seen:
new.append(item)
seen.add(item["url"])
STATE.write_text(json.dumps(list(seen)))
notify(new) # your Slack / email / Discord hookAstuces
- Persiste les URLs
seenentre les exécutions — sans cela, chaque exécution notifie toute la liste - Filtre agressivement :
if "Engineer" in item["title"] and "Remote" in item["location"] - Lance toutes les 4-6 heures — les pages carrières ne changent pas à la minute
Liens
Cette recette est en cours d'extension avec un template de workflow GitHub Actions — repasse bientôt.