This commit is contained in:
2026-10-08 11:48:50 +02:00
parent 22d0588719
commit 207b74b8eb
3 changed files with 23 additions and 28 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
Das Programm lädt Stellenangebote der Bundesagentur für Arbeit für Das Programm lädt Stellenangebote der Bundesagentur für Arbeit für
ausgewählte Entwickler-Suchbegriffe. ausgewählte Entwickler-Suchbegriffe.
Mit **JEV** werden die Anzeigen danach darauf geprüft, Mit **JEV.ai** werden die Anzeigen danach darauf geprüft,
ob sie zu meinem TechStack passen. ob sie zu meinem TechStack passen.
Geeignete Stellenangebote werden anschließend gemeinsam in `stellenangebote.html` Geeignete Stellenangebote werden anschließend gemeinsam in `stellenangebote.html`
ausgegeben. ausgegeben.
+20 -25
View File
@@ -13,32 +13,14 @@ defapi_token = os.getenv("DEF_API_TOKEN")
arbeitsagentur_base_url = "https://rest.arbeitsagentur.de/" arbeitsagentur_base_url = "https://rest.arbeitsagentur.de/"
defapi_url = "https://api.defapi.org/api/v1/decisions" defapi_url = "https://api.defapi.org/api/v1/decisions"
timeout = 60 timeout = 60
jev_instructions_file = "jev-instructions.json"
search_strings = ["Developer", "Webentwickler", "Softwareentwickler"] search_strings = ["Developer", "Webentwickler", "Softwareentwickler"]
wo = "Pforzheim"
combined_response: JobSearchResponse = {"ergebnisliste": []} combined_response: JobSearchResponse = {"ergebnisliste": []}
def main():
load_dotenv()
jobs_data = []
for search in search_strings:
jobs_data = get_jobs(search)
combined_response["ergebnisliste"].extend(jobs_data["ergebnisliste"])
job_refs = get_job_refs(combined_response) def read_json(file_name) -> dict:
jev_instructions = read_json() with open(file_name, mode="r", encoding="utf-8") as read_file:
print(jobs_data)
html_parts = []
for job_ref in job_refs:
data = classify(job_ref, jev_instructions)
if data:
html_parts.append(html_helper.render_html(data))
html_helper.write_html(html_parts)
def read_json() -> dict:
with open("jev-instructions.json", mode="r", encoding="utf-8") as read_file:
jev_instructions = json.load(read_file) jev_instructions = json.load(read_file)
read_file.close() read_file.close()
return jev_instructions return jev_instructions
@@ -61,7 +43,7 @@ def get_jobs(search_string: str) -> JobSearchResponse:
params = { params = {
"angebotsart": "1", "angebotsart": "1",
"was": search_string, "was": search_string,
"wo": "Pforzheim", "wo": wo,
"umkreis": "50", "umkreis": "50",
"arbeitszeit": "ho;vz;tz", "arbeitszeit": "ho;vz;tz",
"page": "1", "page": "1",
@@ -99,7 +81,7 @@ def classify(job_ref: str, jev_instructions: dict) -> tuple[Stellenangebot, floa
"model": "typesafe/jev-1.13", "model": "typesafe/jev-1.13",
"state": job_data["stellenangebotsBeschreibung"], "state": job_data["stellenangebotsBeschreibung"],
"questions": { "questions": {
"job_validation": jev_instructions "job_classification": jev_instructions
}} }}
response = requests.post(defapi_url, headers=headers, json=data, timeout=timeout) response = requests.post(defapi_url, headers=headers, json=data, timeout=timeout)
@@ -107,7 +89,7 @@ def classify(job_ref: str, jev_instructions: dict) -> tuple[Stellenangebot, floa
if response.status_code == 200: if response.status_code == 200:
response_data = response.json() response_data = response.json()
answers = response_data["answers"] answers = response_data["answers"]
score = answers["job_validation"]["noul"] score = answers["job_classification"]["noul"]
if score > 0.6: if score > 0.6:
return job_data, score return job_data, score
else: else:
@@ -117,6 +99,19 @@ def classify(job_ref: str, jev_instructions: dict) -> tuple[Stellenangebot, floa
return None return None
def main():
for search in search_strings:
jobs_data = get_jobs(search)
combined_response["ergebnisliste"].extend(jobs_data["ergebnisliste"])
jev_instructions = read_json(jev_instructions_file)
html_parts = []
for job_ref in get_job_refs(combined_response):
data = classify(job_ref, jev_instructions)
if data:
html_parts.append(html_helper.render_html(data))
html_helper.write_html(html_parts)
if __name__ == "__main__": if __name__ == "__main__":
+2 -2
View File
@@ -1,8 +1,8 @@
import json import json
import markdown import markdown
from tinyhtml import h, raw, render from tinyhtml import h, raw, render
from stellenangebot import Stellenangebot from modules.stellenangebot import Stellenangebot
def render_html(data: tuple[Stellenangebot, float]) -> str: def render_html(data: tuple[Stellenangebot, float]) -> str:
job_data, score = data job_data, score = data