jobsuche-api icon indicating copy to clipboard operation
jobsuche-api copied to clipboard

Beschreibung der Jobs

Open NKDesign30 opened this issue 1 year ago • 21 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?

NKDesign30 avatar Nov 13 '23 11:11 NKDesign30

Doch die gibt es, wenn du jobdetail abfragst

Artur1509 avatar Nov 13 '23 14:11 Artur1509

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

NKDesign30 avatar Nov 13 '23 14:11 NKDesign30

Ich habe nur ein Problem bei den Logos

NKDesign30 avatar Nov 13 '23 14:11 NKDesign30

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

Artur1509 avatar Nov 13 '23 14:11 Artur1509

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

also das fett markierte ist die Logohashid

Artur1509 avatar Nov 13 '23 14:11 Artur1509

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; }

NKDesign30 avatar Nov 13 '23 15:11 NKDesign30

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;

Artur1509 avatar Nov 13 '23 15:11 Artur1509

Schau ich mir an danke!

NKDesign30 avatar Nov 13 '23 15:11 NKDesign30

Hier eine Änderung der OpenAPI Doku zu diesem Thema: https://github.com/bundesAPI/jobsuche-api/pull/48/files#diff-d910ba2ef878f7db0223a966b81c8b3f3b65027bb39e4431bb05140171eece39R272

alexander-zierhut avatar Dec 22 '23 12:12 alexander-zierhut

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?

mokuhn avatar Mar 11 '24 10:03 mokuhn

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: https://github.com/bundesAPI/jobsuche-api/pull/48

alexander-zierhut avatar Mar 11 '24 12:03 alexander-zierhut

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?

mokuhn avatar Mar 12 '24 06:03 mokuhn

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.

alexander-zierhut avatar Mar 12 '24 10:03 alexander-zierhut

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?

MahdiELHasra avatar Mar 24 '24 17:03 MahdiELHasra

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

maenkhouseh avatar Mar 24 '24 17:03 maenkhouseh

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.")

MahdiELHasra avatar Mar 24 '24 18:03 MahdiELHasra

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.

maenkhouseh avatar Mar 24 '24 19:03 maenkhouseh

@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?

alexander-zierhut avatar Mar 24 '24 23:03 alexander-zierhut

@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.

MahdiELHasra avatar Mar 25 '24 00:03 MahdiELHasra

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?

createreadupdate avatar Aug 01 '24 00:08 createreadupdate

btw.. noise reduction powered by PHP :)

createreadupdate avatar Aug 01 '24 01:08 createreadupdate