Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Beschreibung der Jobs #47

Open
NKDesign30 opened this issue Nov 13, 2023 · 21 comments
Open

Beschreibung der Jobs #47

NKDesign30 opened this issue Nov 13, 2023 · 21 comments

Comments

@NKDesign30
Copy link

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?

@Artur1509
Copy link

Artur1509 commented Nov 13, 2023

Doch die gibt es, wenn du jobdetail abfragst

@NKDesign30
Copy link
Author

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

@NKDesign30
Copy link
Author

Ich habe nur ein Problem bei den Logos

@Artur1509
Copy link

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

@Artur1509
Copy link

Artur1509 commented Nov 13, 2023

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

also das fett markierte ist die Logohashid

@NKDesign30
Copy link
Author

NKDesign30 commented Nov 13, 2023

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

@Artur1509
Copy link

Artur1509 commented Nov 13, 2023

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;

@NKDesign30
Copy link
Author

Schau ich mir an danke!

@alexander-zierhut
Copy link

@mokuhn
Copy link

mokuhn commented Mar 11, 2024

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?

@alexander-zierhut
Copy link

alexander-zierhut commented Mar 11, 2024

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

@mokuhn
Copy link

mokuhn commented Mar 12, 2024

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?

@alexander-zierhut
Copy link

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.

@MahdiELHasra
Copy link

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?

@maenkhouseh
Copy link

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

@MahdiELHasra
Copy link

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

@maenkhouseh
Copy link

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.

@alexander-zierhut
Copy link

@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
Copy link

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

@createreadupdate
Copy link

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
Copy link

btw.. noise reduction powered by PHP :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants