Job Search API mit Google Cloud

In diesem Codelab erfahren Sie, wie Sie die Jobsuche und die Talentakquise mit dem Cloud Talent Solution API (CTS) für Ihre Organisation verbessern können. Mithilfe von CTS können Sie die Jobsuche mit leistungsstarken Funktionen für maschinelles Lernen kombinieren.

Lerninhalte

  • CTS in Ihrem Google Cloud-Projekt aktivieren
  • Unternehmen und Stellen in diesen Unternehmen erstellen

Voraussetzungen

  • Ein Google Cloud-Projekt mit Abrechnungseinrichtung ist bereits eingerichtet. Falls Sie noch keines haben, erstellen Sie eins.
  • Etwa eine Stunde

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und die Übungen abschließen

Wie würdest du deine bisherigen Erfahrungen mit der Google Cloud Platform bewerten?

Neuling Fortgeschritten Experte

Diese Anleitung soll vollständig auf der Google Cloud Platform ausgeführt werden. Es sind keine Downloads auf Ihre Workstation erforderlich.

Cloud Talent Solutions API aktivieren

Öffnen Sie die Anwendung in der Cloud Console und klicken Sie oben links auf das Dreistrich-Menü. Rufen Sie die Menüs Talent Solution -> Overview auf.

Da es sich um ein neues Projekt handelt, werden Sie zu einem neuen Bildschirm weitergeleitet, auf dem Sie aufgefordert werden, die API zu aktivieren. Klicken Sie auf „Aktivieren“ und warten Sie einige Minuten, bis die API für dieses Projekt aktiviert wird.

Daten-Logging aktivieren

Kehren Sie nun zur vorherigen Übersichtsseite zurück. Es erscheint ein neues Dialogfeld, in dem Sie aufgefordert werden, die Datenprotokollierung zu aktivieren. Falls dies nicht der Fall ist, können Sie zur vorherigen Dialogfeldseite zurückkehren. Hierdurch wird lediglich sichergestellt, dass die Job Search API auf einem ML-Modell basiert, das Daten benötigt. Im Rahmen der Integration können Sie Ereignisse von Nutzern senden, die diese Modelle weiter trainieren möchten. Wenn dies über Code implementiert wird, können Sie angeben, welche Informationen gesendet werden.

Wir sehen uns genauer an, was diese Ereignisse sind und wie sie später gesendet werden. Aber die vortrainierten Modelle funktionieren gut. Aktivieren Sie die Datenprotokollierung und klicken Sie dann im linken Navigationsbereich dieses Dialogfelds auf „Dienstkontoverbindungen“.

Dienstkonto einrichten

Wenn Sie API-Anfragen senden, müssen Sie diese im Namen eines tatsächlich authentifizierten Kontos stellen. Für die Best Practices für die Google Cloud Platform empfehlen wir, ein Dienstkonto dafür einzurichten. Mit Dienstkonten können Sie leicht authentifizierte Nutzer mit eingeschränkten Berechtigungen einrichten. Dies hilft Ihnen beim Aufbau eines unabhängigen und sicheren Systems.

Beispiel: Wir benötigen ein Dienstkonto, um die Job Search API zu verwenden. Erstellen Sie eine davon und gewähren Sie ihr die Lese-/Schreibberechtigungen über den Bereich „Job-Editor“ im Bereich „Cloud-Talent-Lösung“ in der linken Navigationsleiste. Es ist auch möglich, ein Dienstkonto nur mit „Job-Betrachter“ einzurichten. So wäre es nur schreibgeschützt.

Im nächsten Schritt werden Sie gefragt, ob Sie Nutzern Zugriff auf dieses Dienstkonto gewähren möchten. Sie können diesen Schritt überspringen, aber auf „Schlüssel erstellen“ unten klicken. Wählen Sie für den Schlüsseltyp „JSON“ und dann „Erstellen“ aus. Eine neue JSON-Anmeldedatendatei wird automatisch heruntergeladen. Speichern Sie diese Datei auf Ihrem Server. Der Code, den Sie später schreiben, wird zur Authentifizierung verwendet.

Umgebungsvariablen festlegen

Der Einfachheit halber verwenden wir Google Cloud Shell. Würdest du das aus deiner eigenen Entwicklungsumgebung machen? Achten Sie darauf, dass Sie das Google Cloud SDK und die Clientbibliotheken in der Sprache Ihrer Wahl installieren. In diesem Codelab wird Python verwendet. In Cloud Shell sind die Cloud-Clientbibliotheken bereits installiert. Praktisch, oder?

Damit Code mit den Bibliotheken ausgeführt werden kann, müssen zwei Umgebungsvariablen festgelegt sein: eine, die Ihre Container-ID angibt, die andere die Schlüsseldatei Ihres Dienstkontos. Das legen wir fest.

Klicken Sie bei Ihrem Projekt auf das Symbol >_" rechts oben in der Webkonsole, um eine Cloud Shell zu öffnen. Fügen Sie die folgenden Umgebungsvariablen hinzu, um Ihre Projekt-ID anzugeben und einen Pfad zu Ihrer JSON-Schlüsseldatei festzulegen:

export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"

Prüfen Sie mit „echo“, ob die Variablen festgelegt wurden.

echo $GOOGLE_CLOUD_PROJECT
echo $GOOGLE_APPLICATION_CREDENTIALS

Code-Editor in Cloud Shell öffnen

Öffnen Sie Cloud Shell über das Cloud Shell-Symbol oben rechts in der Google Cloud Console.

Rechts oben in Cloud Shell sehen Sie eine Reihe von Symbolen. Klicken Sie auf Datei -> Code-Editor starten, wie hier gezeigt:

Unternehmen erstellen

Erstellen Sie mit File -> Neue Datei eine neue Quelldatei und füllen Sie sie mit dem Inhalt unten aus. Nennen Sie sie create_company.py.

create_IhrUnternehmen.de

import os

from googleapiclient.discovery import build
from googleapiclient.errors import Error

# Build the service object, passing in the api name and api version
client_service = build('jobs', 'v3')
project_id = 'projects/' + os.environ['GOOGLE_CLOUD_PROJECT']


# Specifying details for the company that's going to be created.
# These are the only two required fields.
# Optional fields are documented at
# http://googleapis.github.io/google-api-python-client/docs/dyn/jobs_v3.projects.companies.html#create
new_company = {
    'display_name': "FooCorp",
    'external_id': "foo_llc"
}
request = {'company': new_company}

try:

    # This is the API call that actually creates the new company.
    result = client_service.projects().companies().create(
       parent=project_id, body=request).execute()

    # You can easily just print the result as a string if you want
    print('Company created: %s' % result)

    # Or you can individual fields.  The fields returned depend on what's specified
    # in the "new_company" object.  To see possible fields of the
    # response, see the "create" documentation at:
    # http://googleapis.github.io/google-api-python-client/docs/dyn/jobs_v3.projects.companies.html#create
    print('%s: %s, %s' % (result.get('externalId'),
                       result.get('displayName'),
                       result.get('name')))

except Error as e:
    print('Got exception while creating company')
    raise e

Was bewirkt dieser Code? Sehen wir uns das genauer an. Hier gibt es zwei relevante Aufrufe der Clientbibliothek:

  • client_service = build('jobs', 'v3') erstellt ein Dienstobjekt mithilfe der Python-Clientbibliothek von Google API.
  • client_service.projects().companies().create(parent=project_id, body=request).execute() führt den API-Aufruf aus, um das Unternehmen zu erstellen. Die Antwort auf diesen Aufruf ist ein Objekt, das Informationen zum Unternehmen enthält. Die Inhalte des Anfrageobjekts und des Antwortobjekts werden in der Dokumentation zur Erstellungsmethode beschrieben.

Führen Sie die Datei über die Eingabeaufforderung (direkt unter dem Codeeditor-Fenster) aus. Die Ausgabe sieht in etwa so aus:

> python create_company.py
Company created: {u'externalId': u'foo_llc', u'displayName': u'FooCorp', u'name': u'projects/[PROJECT_ID]/companies/1cd6ada9-e678-49cf-80da-aaaf8876feda'}
Foo_llc, FooCorp, projects/[PROJECT_ID]/companies/1cd6ada9-e678-49cf-80da-aaaf8876feda 

Der Name ist die eindeutige Kennung, die von der Job Search API generiert wird, während die externe_ID die Kennung ist, die Sie von Ihrem eigenen Jobsystem angeben. Jedes Mal, wenn Sie über die API auf ein Objekt verweisen, muss der name verwendet werden.

Unternehmen aktualisieren

Falls Sie bereits eine Rechtspersönlichkeit im System haben und einige Felder hinzufügen oder ändern möchten, gehen Sie so vor:

  • Erstellen Sie ein Objekt mit den aktuellen Feldwerten für das Unternehmen.
  • Aktualisieren Sie dieses Objekt mit den neuen oder aktualisierten Feldern. Verwenden Sie dabei das Feld „Name des Unternehmens“ als Schlüssel, damit die API weiß, welches Unternehmen aktualisiert werden soll.
  • Reichen Sie das neue Objektmit der Methode "patch" einein.

Für diesen Vorgang müssen Sie alle vorhandenen Werte haben, da die Unternehmenswerte sofort überschrieben werden, unabhängig davon, welche Werte Sie tatsächlich aktualisiert haben. Das bedeutet, dass wir diese Daten vor der Aktualisierung der Informationen zum Unternehmen abrufen müssen.

Erstellen Sie in Ihrem Arbeitsbereich eine neue Datei, update_company.py. Fügen Sie als Erstes die unten gezeigte Methode get_company hinzu.

update_company.py aktualisieren

import os

from googleapiclient.discovery import build
from googleapiclient.errors import Error

# Build the service object, passing in the api name and api version
client_service = build('jobs', 'v3')
project_id = 'projects/' + os.environ['GOOGLE_CLOUD_PROJECT']
company_name = 'Your company name goes here'


def get_company(company_name):
   try:
       company_existed = client_service.projects().companies().get(
           name=company_name).execute()
       print('Company existed: %s' % company_existed)
       return company_existed
   except Error as e:
       print('Got exception while getting company')
       raise e


newCompany = get_company()

Einer der API-Aufrufe ähnelt der Erstellung eines Unternehmens. Die Clientbibliothek wird mit einer REST-Schnittstelle generiert, sodass die CRUD-Vorgänge, die Sie in Unternehmen durchführen, alle das Format client_service.projects().companies().theMethod(argName=argValue).execute(). haben.

Wir haben jetzt die Gruppe von vorhandenen Werten und erstellen ein „&patch“-Objekt mit den Feldnamen, die aktualisiert werden sollen, sowie deren neuen Werten. Anschließend können Sie Ihr Unternehmensobjekt mit neuen Werten aktualisieren. Hier einige Aktivitäten, die bei Python auftreten: Die Clientbibliothek stellt das Unternehmen als Wörterbuchobjekt dar. Das bedeutet, dass die Methode bereits integriert ist. Keine Sonderschleife erforderlich! Erstellen Sie ein Wörterbuchobjekt direkt unter dem bereits geschriebenen Code.

update_company.py aktualisieren

...  
    patch = {
       'displayName': "The New Bar",
       'websiteUri': "http://www.example.com"
    }
    newCompany.update(patch)
    print("Debug: New company info %s " % newCompany)
... 

Jetzt müssen Sie nur noch ein Anfrageobjekt erstellen (weitere Informationen finden Sie in der Patch-Dokumentation) und den API-Aufruf ausführen.

... 
    request = {'company': newCompany}
 
    company_updated = client_service.projects().companies().patch(
        name=company_name, body=request).execute()
    print('Company updated: %s' % company_updated)
... 

Wenn Sie nur Felder angeben möchten, die Sie tatsächlich ändern möchten, können Sie diese auch zusammen mit einer Aktualisierungsmaske verwenden. Dies ist nützlich, wenn Sie bereits eine aktualisierte Einstellung für Unternehmensobjekte haben oder nur ein Feld aktualisieren möchten und nicht unnötig große Objekte hin- und herschicken möchten. Aber wie verwendet man eine Aktualisierungsmaske, fragen Sie? Wo befindet sich der Code, der diese spannende und neuartige Möglichkeit zum Aktualisieren von Unternehmensinformationen veranschaulicht?

Du hast unsere Gedanken gelesen! Mit dem folgenden Snippet wird die Aktualisierung einer Unternehmensinformation statt einer vollständigen Eingabe ersetzt, indem eine Aktualisierungsmaske verwendet wird.

update_company.py aktualisieren

... 
   # New set of fields, not the complete company object
   companyFields = {'displayName': 'The New Bar',
                    'websiteUri': 'http://shouldNotUpdate.com',
                    'externalId': 'bar_llc'}

   # Note that the mask only contains the display name, not the URL.
   # This is entirely for demonstration purposes.  This mask will tell the API
   # to update the display name, but NOT the website uri.
   mask = 'displayName'
   request = {'company': companyFields,
              'update_mask': mask}
   company_updated = client_service.projects().companies().patch(
       name=company_name,
       body=request).execute()
   print('Company updated!: %s' % company_updated)
... 

Hinweis: Der API-Aufruf ist identisch. Der Unterschied ist, dass das Anfrageobjekt jetzt zwei Felder hat (Unternehmen und update_mask anstatt nur eines (Unternehmen). Die Aktualisierungsmaske ist eine durch Kommas getrennte Liste von Feldern. Wenn wir das Feld „websiteUri"“ in die Maske aufnehmen möchten, sieht der Maskenwert stattdessen so aus:

   mask = 'displayName,websiteUri'

Unabhängig von der gewählten Route führen Sie sie über Cloud Shell aus. Wenn Sie diese Druckanweisungen beibehalten haben, sollte eine Ausgabe sowohl den alten als auch den neuen Wert für Ihr Unternehmen enthalten.

$ python update_company.py
Company existed: {u'externalId': u'bar_llc', u'displayName': u'The New Bar', u'name': u'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e', u'websiteUri': u'http://www.example.com'}
Company {u'externalId': u'bar_llc', u'displayName': u'The New Bar', u'name': u'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e', u'websiteUri': u'http://www.example.com'}
New company info {u'externalId': u'bar_llc', u'name': u'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e', u'displayName': 'The New Bar', u'websiteUri': 'http://www.example.com'}
Company updated: {u'externalId': u'bar_llc', u'displayName': u'The New Bar', u'name': u'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e', u'websiteUri': u'http://www.example.com'}
$

Ein Jobangebot ohne Jobsuche wäre also nicht ideal. Im letzten Abschnitt ging es um die Erstellung von Unternehmen. Als Nächstes beschäftigen wir uns mit der Erstellung von Jobs und Best Practices für die Zusammenarbeit.

Beachten Sie, dass Jobs mit Unternehmen verknüpft werden. Wenn Sie noch keine Unternehmen erstellt haben, die mit der API erstellt wurden, oder wenn Sie am Ende des Abschnitts den Aufruf „&delete“ ausgeführt haben und Ihr einziges Unternehmen entfernt haben, gehen Sie zurück und erstellen Sie ein Unternehmen noch einmal. Dann können Sie Jobs erstellen!

Job erstellen

Erstellen Sie zuerst einen Job!

Zum Erstellen eines Jobs benötigen Sie die folgenden Daten:

  • Den Namen des Unternehmens Nicht der für Menschen lesbare String "My Fancy Company LLC", aber dieser viel längere String für "projects/[PROJECT_ID]/ erfährst.
  • Eine Anforderungs-ID für den Job Diese ID ähnelt der external_id für ein Unternehmen. Sie stellt Ihre eigene eindeutige Kennung für den Job dar, um die Cloud Talent Solution API einfacher mit Ihrer aktuellen Joblösung zu synchronisieren, z. B. Senior_llama_wrangler.
  • Der title des Jobs, der angezeigte Name für den Job, z. B. Senior Llama Wrangler.
  • Die Beschreibung des Jobs. Die Beschreibung kann eingebetteten HTML-Code enthalten, damit Sie sie richtig formatieren können. Inhalte sind selbsterklärend. "p>Leitet das Team von Lama-Wranglers.</p><p> erfordert Führungskompetenz und Erfahrung mit Lamas.</p>
  • applicationInfo: Weitere Informationen zur Bewerbung Kann 1+ URIs, 1+ E-Mail-Adresse oder ein HTML-formatierter String mit weiteren Anweisungen sein. Es können sogar alle 3 eingeschlossen werden! Sie müssen jedoch mindestens eine hinzufügen.

Wenn wir also einen Job für unser zuvor gegründetes Unternehmen FooCorp erstellen würden, könnten die Felder so aussehen:

name

projects/[PROJECT_ID]/companies/0123-Big-Hex-String-AABB0

requisition_id

Senior_Lama_Wrangler

title

Senior Lamr Wrangler

description

Erfahrener Llama Wrangler erforderlich für eine Vollzeitstelle. Führungskompetenz erforderlich, da Sie mit einem Team von Lama-Careen in Wrangler-Wettkämpfen trainieren.&lt/p/>Sie müssen gut mit Tieren arbeiten und sind in der Lage, auch wirklich schnell zu laufen. Fast richtig schnell. Hier ein paar Lamas.

application_info

URIs: http://www.example.com/llama_wrangler_application/

E-Mails: llama-apply@example.com

Wenn der Name des Unternehmens nicht mehr vorhanden ist, können Sie ihn mithilfe des Codes aus Schritt 3 abrufen.

Der Code zum Erstellen eines Jobs ähnelt dem Code für die Erstellung eines Unternehmens. Die ersten Zeilen sollten Ihnen vertraut sein (import blah blah blah, Instanz-Client-Objekt). Dann erstellen Sie ein Diktierobjekt (nur eine verschachtelte Gruppe von Schlüssel/Wert-Paaren), das Ihre Anfrage repräsentiert, und senden es zusammen mit dem API-Aufruf „create“.

Fügen Sie das folgende Snippet in eine Datei mit dem Namen „create_job.py“ ein. Sie können einen beliebigen Namen nennen. In dieser Anleitung wird jedoch von diesem Dateinamen ausgegangen.

create_job.py erstellen

import os

from googleapiclient.discovery import build
from googleapiclient.errors import Error

client_service = build('jobs', 'v3')
project_id = 'projects/' + os.environ['GOOGLE_CLOUD_PROJECT']

new_job = {
   'company_name': 'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e',
   'title': 'Senior Llama Wrangler',
   'description':
   """Experienced Llama Wrangler required for full-time position.
   Leadership ability required, as you will be taking a team of llama
   caregivers and training them up to full-scale wranglers.
   <p/>Must work well with animals and occasionally be prepared to run
   really, like really really fast.  Like REALLY fast.
   These are quick llamas.""",
   'requisition_id': 'senior_llama_wrangler',
   'application_info': {
       'uris': ['http://www.example.com/llama-wrangler-application'],
       'emails': ['llama-apply@example.com']
   }
}

try:
   # Nest that Job object in a "job" object.  Now it's an API request!
   request = {'job': new_job}

   # The actual API call happens here.
   result = client_service.projects().jobs().create(
       parent=project_id, body=request).execute()
   print('Job created: %s' % result)

except Error as e:
   print('Got exception while creating job')
   raise e

Führen Sie dies über Cloud Shell aus. Sie sollten dann ein großes JSON-Blob mit dem gerade erstellten Job abrufen.

$ python create_job.py
Job created: {u'languageCode': u'en', u'description': u'Experienced Llama Wrangler required for full-time position. Leadership ability required, as you will be taking a team of llama caregivers and training them up to full-scale wranglers.Must work well with animals and occasionally be prepared to run really, like really really fast. Like REALLY fast. These are some quick llamas.', u'applicationInfo': {u'emails': [u'llama-apply@example.com'], u'uris': [u'http://www.example.com/llama-wrangler-application']}, u'companyName': u'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e', u'requisitionId': u'senior_llama_wrangler', u'title': u'Senior Llama Wrangler', u'postingExpireTime': u'2019-09-11T16:04:48.546Z', u'visibility': u'ACCOUNT_ONLY', u'postingCreateTime': u'2019-08-12T16:04:48.546Z', u'companyDisplayName': u'Masked Panda Inc', u'postingUpdateTime': u'2019-08-12T16:04:48.611Z', u'postingPublishTime': u'2019-08-12T16:04:48.611Z', u'name': u'projects/[PROJECT_ID]/jobs/12345}

Wenn Sie solche Ergebnisse erhalten, haben Sie den Job erfolgreich erstellt.

Jobs müssen eindeutig sein

Führen Sie als Test dieses letzte Skript aus und sehen Sie, was passiert.

$ python create_job.py
Got exception while creating job
Traceback (most recent call last):
  File "create_job.py", line 37, in <module>
    raise e
googleapiclient.errors.HttpError: <HttpError 409 when requesting https://jobs.googleapis.com/v3/projects/[PROJECT_ID]/jobs?alt=json returned "Job projects/[PROJECT_ID]/jobs/103672929591403206 already exists. Request ID for tracking: ec94f4cb-70f1-48cf-bae6-b4dad056ac3f:APAb7ITRlgTTpVMONSSBCG4LnFzqR765Eg==. Related Job requisition ID: senior_llama_wrangler.">

Was ist hier passiert? Sie haben versucht, ein identisches Stellenangebot zu eingeben. Nicht abgelaufene Jobs müssen im System eindeutig sein.

Die Eindeutigkeit wird durch die folgenden Felder bestimmt:

  • Name des Unternehmens – erforderlich, wenn Sie einen Job erstellen, nicht aktualisierbar
  • Anforderungs-ID: Beim Erstellen eines Jobs erforderlich, kann nicht aktualisiert werden
  • Sprachcode (optional, standardmäßig en_us, anpassbar)

Wenn ein Job, den Sie erstellen oder aktualisieren möchten, alle drei Felder gemeinsam mit einem vorhandenen, nicht ablaufenden Job hat, wird er als Duplikat eingestuft und mit der Fehlermeldung oben kann ein Fehler beim Erstellen/Aktualisieren gelten.

Formular gesendet.

Herzlichen Glückwunsch, du hast jetzt ein Unternehmen UND ein Stellenangebot für dieses Unternehmen in deinem System! Und das alles hast du in weniger als einer Stunde geschafft! Wissen Sie, wie lange es dauerte, die besten Stellenausschreibungen im Internet zu erreichen? Mehr als eine Stunde. Beispielsweise mehr. Wochen Monate Vorstandstreffen. Vermutlich waren einige Tabellen und Leitlinien enthalten. Ich denke, in diesen Niederlassungen war es ziemlich echt. Weißt du, was du geschafft hast? Knapp eine Stunde Weiter so!

Aber es gibt noch mehr! Weiter so!

Job aktualisieren

Wie bei Unternehmen können wir einen Job erhalten, um ihn zu sehen, und ihn patchn, um ihn zu aktualisieren.

Hier erhalten Sie Informationen dazu, wie Sie die Auftragsdetails abrufen können. Wenn Ihnen das Snippet unten vertraut ist, wurde sie aus dem vorherigen Abschnitt durch die Methode „get_company&quot“ ersetzt und durch die Variable „job_name“ hinzugefügt. Sehen wir uns zuerst an, wie du die Informationen abrufen kannst.

update_job.py

import os

from googleapiclient.discovery import build
from googleapiclient.errors import Error

client_service = build('jobs', 'v3')
project_id = 'projects/' + os.environ['GOOGLE_CLOUD_PROJECT']

# The interesting bit
def get_job():
   try:
       job_existed = client_service.projects().jobs().get(
           name=job_name).execute()
       print('Job existed: %s' % job_existed)
       return job_existed
   except Error as e:
       print('Got exception while getting job')
       raise e

job_name = "projects/[PROJECT_ID]/jobs/12345"
job_info = get_job(job_name)

Um den Job zu aktualisieren, haben Sie dieselben Optionen wie vor der Aktualisierung des Unternehmens: Sie senden ein vollständiges Objekt mit aktualisierten Werten, um den alten zu ersetzen, oder ein kleineres Patch mit einer durch Kommas getrennten Feldmaske.

update_job.py (vollständige Aktualisierung des Objekts)

   # First the full-replacement method.  Update the complete job object with new field values.
   job_patch = {
       'title': "Rogue Llama Acquisition Engineer"
   }

   job_info.update(job_patch)
   request = {"job": job_info}

   job_updated = client_service.projects().jobs().patch(
       name=job_name, body=request).execute()
   print ("Updated job info : %s" % job_updated)

update_job.py (nur neue Feldwerte und Aktualisierungsmaske)

   # Alternatively, if you know which fields have been updated, you can submit a patch with just the changes
   # and an update mask. This time let's just re-use the same job patch, and create an update mask.
   job_patch = {
       'title': "Rogue Llama Acquisition Engineer"
   }

   update_mask = "title"
   request = {"job": job_patch,
              "updateMask": update_mask
              }

   job_updated = client_service.projects().jobs().patch(
       name=job_name, body=request).execute()

   print ("Updated job info : %s" % job_updated)   

Die beiden Snippets oben erfüllen genau denselben Zweck: Sie aktualisieren eine bestimmte Stellenausschreibung mit dem Titel „Rogue Llama Acquisition Engineer“. Beachten Sie auch, dass die Zeile, die den API-Aufruf ausführt, die gleiche ist: Der einzige Unterschied besteht im Anfrageobjekt. Ein Job hat ein vollständiges Jobobjekt, das das Jobobjekt durch diesen Jobnamen ersetzt. Bei den anderen handelt es sich einfach um eine Gruppe von Feldern, die aktualisiert werden sollen.

Dabei wird immer die gleiche Ausgabe ausgegeben. Probieren Sie es einfach aus.

$ python update_job
Updated job info : {u'languageCode': u'en', u'description': u'Experienced Llama Wrangler required for full-time position. Leadership ability required, as you will be taking a team of llama caregivers and training them up to full-scale wranglers.Must work well with animals and occasionally be prepared to run really, like really really fast. Like REALLY fast. These are some quick llamas.', u'applicationInfo': {u'emails': [u'llama-apply@example.com'], u'uris': [u'http://www.example.com/llama-wrangler-application']}, u'companyName': u'projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e', u'derivedInfo': {u'jobCategories': [u'SCIENCE_AND_ENGINEERING']}, u'requisitionId': u'senior_llama_wrangler', u'title': u'Rogue Llama Acquisition Engineer', u'postingExpireTime': u'2019-09-11T16:04:48.546Z', u'visibility': u'ACCOUNT_ONLY', u'postingCreateTime': u'2019-08-12T16:04:48.546Z', u'companyDisplayName': u'Masked Panda Inc', u'postingUpdateTime': u'2019-08-12T19:28:41.850Z', u'postingPublishTime': u'2019-08-12T16:04:48.611Z', u'name': u'projects/[PROJECT_ID]/jobs/12345}

Prima! Sie haben Schritt 4 abgeschlossen.

Sieh dir jetzt an. Das alles wie eine Art Produktivitätsmonster zu entfachen. Bisher kannst du Unternehmen anlegen, Jobs erstellen und beides gleichzeitig aktualisieren. Vielleicht ist Ihnen aber schon etwas Neugieriger an diesen Lektionen aufgefallen. Durch diesen letzten Vorgang wird der D in C.R.U.D gestellt. Was ist, wenn wir ihn löschen möchten? Keine Sorge, Leser! Das wird im nächsten Abschnitt detailliert beschrieben.

Warum starten Unternehmen inzwischen etwa fünf Minuten?

Unternehmen löschen

Das Löschen eines Unternehmens ist ganz einfach. Rufen Sie einfach die Importmethode auf, die Sie beim Erstellen oder Aktualisieren eines Unternehmens verwendet haben. Rufen Sie einfach die Methode delete auf und übergeben Sie nur den Namen des Unternehmens. Dazu ist kein Anfragetext erforderlich.

   # Yup, that's the whole thing.
   company_to_delete = "Insert company name here"
   result = client_service.projects().companies().delete(
       name=company_to_delete).execute()

Für die Bereinigung, während Sie sich mit dieser API vertraut machen, zeigen wir Ihnen hier ein einfaches Python-Skript, das den Namen eines Unternehmens als Befehlszeilenparameter verwendet und das Unternehmen löscht.

delete_company.py

from googleapiclient.discovery import build
from googleapiclient.errors import Error

client_service = build('jobs', 'v3')

# Name of the company to delete
company_to_delete = 'projects/[PROJECT_ID]/companies/123-abc-123'

try:
   # Yup, that's the whole thing.
   result_company = client_service.projects().companies().delete(
       name=company_to_delete).execute()

   print('Result of deleting company: %s' % result_company)

except Error as e:
   print('Got exception while deleting company')
   raise e

Rufen Sie es auf und übergeben Sie den Namen des Unternehmens als einziges Befehlszeilenargument.

$ python delete_company.py projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e
Got exception while deleting company
Traceback (most recent call last):
  File "delete_company.py", line 29, in <module>
    raise e
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://jobs.googleapis.com/v3/projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e?alt=json returned "Company with name projects/[PROJECT_ID]/companies/083495ad-acba-477f-a084-8be84f31692e still has open jobs. Request ID for tracking: 6b9fe1a0-50ae-48b0-b33d-1622d547c363:APAb7ISnO4taWI4poffoX/EqzRCPSwpEbQ==">

Sie haben das Lab erfolgreich abgeschlossen. Warte dran – warte eine Sekunde. Was ist das? Ein Fehler ist aufgetreten? Und noch offene Jobs verfügbar?

Ja. Sie kennen jetzt die erste Regel zum Löschen von Unternehmen: Sie schlägt fehl, solange das Unternehmen noch offene Jobs hat. Wie gehen wir damit um? Wir müssen dann alle offenen Jobs löschen, die mit diesem Unternehmen verknüpft sind.

Jetzt ist es absolut verständlich, dass Sie den gerade erstellten Job löschen und dann das Unternehmen löschen, mit dem er zusammengearbeitet hat. Das klingt sinnvoll, Leser! Das können wir tun.

delete_company.py

from googleapiclient.discovery import build
from googleapiclient.errors import Error

client_service = build('jobs', 'v3')

# Replace with your actual company and job names.
company_to_delete = 'projects/[PROJECT_ID]/companies/123-abc-123'
job_to_delete = 'projects/[PROJECT_ID]/jobs/12345'

try:
   result_job = client_service.projects().jobs().delete(
       name=job_to_delete).execute()

   result_company = client_service.projects().companies().delete(
       name=company_to_delete).execute()

   print('Result of deleting job: %s' % result_job)
   print('Result of deleting company: %s' % result_company)

except Error as e:
   print('Got exception while deleting company')
   raise e

Führen Sie ihn jetzt aus. Die von diesen API-Aufrufen zurückgegebenen Werte sollten die aktuellen Einträge aus „Unternehmen“ und „Job“ sein, d. h. müssen leer sein.

python delete_company.py
Result of deleting job: {}
Result of deleting company: {}

Oh, Gut gemacht!

Abschließend noch ein wichtiger Punkt: Die oben beschriebene Lösung hat gut funktioniert, weil Sie als Leser

  • Dieser Jobname war bereits für alle vorhandenen Jobs in diesem Unternehmen vorhanden.
  • Hat zu viel erstellt, um Jobs für dieses Unternehmen manuell zu löschen.

Nehmen wir an, das war der Fall.

Es gibt einen API-Aufruf, jobs.list(), der Jobs zurückgibt, die mit einer angegebenen Projekt-ID und einer Muttergesellschaft übereinstimmen. So wird die Methode aufgerufen:

jobs_response = client_service.projects().jobs().list(
    parent=project_id,
    filter='companyName="' + company_name + '"').execute()
if jobs_response.get('jobs') is not None:
    for job in jobs_response.get('jobs'):
        print('- %s: %s' % (
              job.get('title'),
              job.get('name')))

Sie können jetzt Unternehmens- und Stellenangebote mit der Google Cloud Talent Solutions Job Search API erstellen und verwalten.

Behandelte Themen

  • Unternehmen erstellen und verwalten
  • Stellenangebote für diese Unternehmen erstellen und verwalten
  • Dienstkonten einrichten, die in Ihrem Namen mit der API interagieren

Weitere Informationen