bundesAPI / jobsuche-api

API zur Bundesagentur für Arbeit Jobsuche

Home Page:https://jobsuche.api.bund.dev/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Beschreibung der Jobs

NKDesign30 opened this issue · comments

Hey ich habe eine Importer gebaut für meine Webseite der die Jobs auf miene Seite importiert. Mir fehlt jedoch sowas wie Beschreibung etc.

hier die file:
https://github.com/NKDesign30/BAFA-API/blob/main/job-importer.php

habe ich was falsch gemacht oder gibt es keine wirkliche beschreibung?

commented

Doch die gibt es, wenn du jobdetail abfragst

Danke gerade schon gemekert das ich noch 2 urls abfragen muss :D

Ich habe nur ein Problem bei den Logos

commented

Das logo hat eine eigene hashid, die findest du wenn du die jobdetail Abfrage gemacht hast: "arbeitgeberLogoHashId"

commented

rest.arbeitsagentur.de/jobboerse/jobsuche-service/ed/v1/arbeitgeberlogo/fVv0WF0Fk806NPJ8tnbeWCzQhypEHyAOGFkyRnC2TW4=

also das fett markierte ist die Logohashid

hier schau mal wie ich es gemacht habe:

https://github.com/NKDesign30/BAFA-API/blob/main/job-importer.php

function job_importer_get_company_logo($access_token, $hashID)
{
$url = "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v2/jobdetails/$hashID";
$options = array(
'http' => array(
'header' => "OAuthAccessToken: $access_token\r\n",
'method' => 'GET'
)
);
$context = stream_context_create($options);
$logo_data = file_get_contents($url, false, $context);

if ($logo_data === FALSE) {
error_log('Fehler beim Abrufen des Unternehmenslogos');
return null;
}

// Speichern des Logos im Upload-Verzeichnis
$upload_dir = wp_upload_dir();
$logo_dir = $upload_dir['basedir'] . '/Company-Logos';
if (!file_exists($logo_dir)) {
wp_mkdir_p($logo_dir);
}

$file_path = $logo_dir . '/' . $hashID; // Keine Dateiendung festgelegt
file_put_contents($file_path, $logo_data);

return $file_path;
}

commented

Wenn ich das richtig sehe hast du die arbeitgeberHashId genommen und nicht die arbeitgeberLogoHashid

$logo = job_importer_get_company_logo($access_token, $job['arbeitgeberHashId']);
$job['logo'] = $logo;

Schau ich mir an danke!

Ich habe das Problem, dass die aktuelle Abfrage keine HashID mehr liefert und ich habe versucht, die HashID aus der ref nr zu bekommen, indem ich sie in Base64 umwandle. Das scheint aber nicht zu klappen. Gibt es eine Möglichkeit die HashID aus anderen Angaben zu bekommen oder die Job Details auch über die Referenznummer abzurufen?

TL;DR

Jetzt wird die Job Ref Nr verwendet. Diese wird per base64 kodiert.

@mokuhn Schau dir mal meinen PR an, der leider schon ewig offen ist und nicht merged wird. Dort erkläre ich, wie du dieses Problem umgehst.

PR: #48

Hallo @alexander-zierhut, vielen Dank für die Antwort. Ich hatte Deinen Beitrag gelesen und dann mal ausprobiert, ob ich die Referenznummer einfach in Base64 übersetzen kann. Das scheint aber nicht zu klappen. Wenn ich die Referenznummer in Base64 übersetze, dann kommt nicht die HashID raus. Ich habe das bei älteren Daten mehrfach überprüft. Mache ich hier noch was falsch?

Hi @mokuhn Folgendes funktioniert bei mir:

$hash = base64_encode($job->refnr);
$url = "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v2/jobdetails/$hash";

Ich habe es gerade getestet. Tatsächlich kommt dabei nicht die HashID raus, allerdings wird diese auch nicht mehr für den Endpunkt verwendet.

Hallo @alexander-zierhut, vielen Dank für die Antwort. Ich hatte Deinen Beitrag gelesen und dann mal ausprobiert, ob ich die Referenznummer einfach in Base64 übersetzen kann. Das scheint aber nicht zu klappen. Wenn ich die Referenznummer in Base64 übersetze, dann kommt nicht die HashID raus. Ich habe das bei älteren Daten mehrfach überprüft. Mache ich hier noch was falsch?

Ich habe dieses Problem auch erlebt. Haben Sie eine Lösung gefunden?

What is the exact use case why do you need it?

What is the exact use case why do you need it?

I'm trying to get the 'Bewerbung' Details, such as address, email, phone number, but something went wrong.

import requests
import json
import base64

def authenticate():
    auth_url = "https://rest.arbeitsagentur.de/oauth/gettoken_cc"
    auth_data = {
        "client_id": "c003a37f-024f-462a-b36d-b001be4cd24a",
        "client_secret": "32a39620-32b3-4307-9aa1-511e3d7f48a8",
        "grant_type": "client_credentials"
    }
    response = requests.post(auth_url, data=auth_data)
    if response.status_code == 200:
        return response.json().get("access_token")
    else:
        print("Authentication failed.")
        return None

def fetch_jobs(token):
    jobs_url = "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v4/jobs"
    headers = {"Authorization": "Bearer " + token}
    response = requests.get(jobs_url, headers=headers)
    
    if response.status_code == 200:
        return response.json()
    else:
        print("Failed to fetch jobs data.")
        return None

def fetch_job_details(encoded_refnr, token):
    job_details_url = f"https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v2/jobdetails/{encoded_refnr}"
    headers = {"Authorization": "Bearer " + token}
    response = requests.get(job_details_url, headers=headers)
    
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Failed to fetch job details for encoded refnr: {encoded_refnr}")
        return None
# Bewerbung details ----------------------------------------------------------------------------------------------------
def fetch_job_application(encoded_refnr, kundennummer_hash, token):
    application_url = f"https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v3/jobs/{encoded_refnr}/bewerbung"
    headers = {
        "Authorization": "Bearer " + token,
        "kundennummerHash": base64.b64encode(kundennummer_hash.encode()).decode()
    }
    response = requests.get(application_url, headers=headers)
    
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Failed to fetch application data for encoded refnr: {encoded_refnr}")
        return None
# ----------------------------------------------------------------------------------------------------------------------------------------
# Authenticate to get the access token
access_token = authenticate()

if access_token:
    # Fetch jobs data
    jobs_data = fetch_jobs(access_token)
    
    if jobs_data:
        for job in jobs_data["stellenangebote"]:
            encoded_refnr = base64.b64encode(job["refnr"].encode()).decode()
            kundennummer_hash = job["kundennummerHash"]
            job_details = fetch_job_details(encoded_refnr, access_token)
            job_application = fetch_job_application(encoded_refnr, kundennummer_hash, access_token)
            job["details"] = job_details
            job["application"] = job_application
        
        print(json.dumps(jobs_data, indent=4))
    else:
        print("No jobs data available.")
else:
    print("Authentication failed. Unable to fetch jobs data.")

Sorry to let you down but it wont work, those details are guarded by captcha as well, we tried reverse engineering the API for long time, then we decided to move in another direction.

@MahdiELHasra I am able to retrieve the details. Can you sent me one response of def fetch_jobs(token): so I can try to fetch the details?

@MahdiELHasra I am able to retrieve the details. Can you sent me one response of def fetch_jobs(token): so I can try to fetch the details?

it shows me only this :

{
    "stellenangebote": [
        {
            "beruf": "Mechatroniker/in",
            "titel": "Techniker / Kfz-Mechatroniker Technischer Support (m/w/d)",
            "refnr": "18032-42355927-324-S",
            "arbeitsort": {
                "plz": "85748",
                "ort": "Garching bei M\u00fcnchen",
                "strasse": "Parkring 32",
                "region": "Bayern",
                "land": "Deutschland",
                "koordinaten": {
                    "lat": 48.25135228013107,
                    "lon": 11.632994667138373
                }
            },
            "arbeitgeber": "in-tech GmbH",
            "aktuelleVeroeffentlichungsdatum": "2024-03-25",
            "modifikationsTimestamp": "2024-03-24T11:21:16.653",
            "eintrittsdatum": "2024-03-25",
            "kundennummerHash": "2RNUuVt1pbIKW0lJl-Z7nhWZQMgIEol5US7F52oliC4="
        },
        ...
        ]

How can I view the contents of the endpoint "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v3/jobs/MTgwMzItNDIzNTU5MjctMzI0LVM/bewerbung"? Currently, it only displays a limited amount of information, but I'm interested in accessing the full content.

Sorry to let you down but it wont work, those details are guarded by captcha as well, we tried reverse engineering the API for long time, then we decided to move in another direction.

Maybe using chrome driver, making a screenshot and letting an OCR model solve the captcha?

captcha

2

With a little noise reduction in the image - took me like an hour - I think that's solvable.

OCR result so far was PRANzM ...

But is that even legal?

btw.. noise reduction powered by PHP :)