Interfejs API Job Search dla Google Cloud

Z tego modułu ćwiczeń dowiesz się, jak usprawnić pracę i pozyskiwać nowych pracowników w swojej organizacji przy użyciu interfejsu Cloud Talent Solution API (CTS). Dzięki CTS możesz zwiększyć skuteczność systemów uczących się w swojej pracy.

Czego się nauczysz:

  • Włącz funkcję CTS w projekcie Google Cloud
  • Tworzenie firm i ofert pracy w tych firmach

Czego potrzebujesz

  • Projekt Google Cloud z płatnościami jest już skonfigurowany (jeśli go jeszcze nie masz, utwórz go).
  • Około godziny

Jak będziesz korzystać z tego samouczka?

Przeczytaj tylko te materiały Przeczytaj je i wykonaj ćwiczenia.

Jak oceniasz swoje dotychczasowe doświadczenia z Google Cloud Platform?

Początkujący dla średniozaawansowanych ekspert

Ten samouczek ma w pełni działać w Google Cloud Platform. Nie musisz pobierać plików na stację roboczą.

Włącz interfejs Cloud Talent Solutions API

Otwórz swoją aplikację w Cloud Console i kliknij menu w lewym górnym rogu. Przejrzyj menu Omówienie rozwiązania -</gent.

Ponieważ jest to nowy projekt, nastąpi przekierowanie na nowy ekran z prośbą o włączenie interfejsu API. Kliknij Włącz i zaczekaj kilka minut, aż interfejs API zostanie włączony w tym projekcie.

Włącz logowanie danych

Wrócisz do poprzedniej strony. Pojawi się nowe okno z prośbą o włączenie logowania danych (jeśli nie wróci, wróć na stronę tego okna). Wymaga to jedynie potwierdzenia, że interfejs Job Search API jest oparty na modelu systemów uczących się, który potrzebuje danych. W ramach integracji możesz wysyłać informacje o zdarzeniach od użytkowników, którzy szukają dalszych modeli trenowania. Po zaimplementowaniu tego kodu możesz określić, jakie informacje mają być wysyłane.

Omówimy szczegółowo, na czym polegają te zdarzenia i jak je wysyłać, ale dobrze wytrenowane modele będą działać. Włącz logowanie danych, a następnie kliknij „Połączenia z kontem usługi” w panelu nawigacyjnym po lewej stronie w tym oknie.

Konfiguracja konta usługi

Żądanie API należy wykonać w imieniu konkretnego uwierzytelnionego konta. Sprawdzone metody Google Cloud Platform zaleca skonfigurowanie konta usługi. Konta usługi pełnią prosty sposób konfigurowania uwierzytelnionych użytkowników, którzy mają ograniczone uprawnienia. Pomoże Ci to w tworzeniu niezależnego i bezpiecznego systemu.

Na przykład do korzystania z interfejsu API Job Search potrzebne jest konto usługi. Utwórz konto i przyznaj mu uprawnienia do odczytu/zapisu w sekcji „Edytor zadań” w sekcji „Rozwiązanie do Cloud Talent” w panelu nawigacyjnym po lewej stronie. Można też założyć konto usługi z uprawnieniami tylko do wyświetlania oferty pracy i mieć tylko dostęp tylko do odczytu.

W następnym kroku zapytamy Cię, czy chcesz przyznać użytkownikom dostęp do tego konta usługi. Możesz pominąć ten krok, ale pamiętaj, aby kliknąć „Utwórz klucz” u dołu strony. Jako typ klucza wybierz "JSON", a następnie "Utwórz". Zostanie automatycznie pobrany nowy plik danych JSON. Zapisz ten plik na swoim serwerze (kod, który utworzysz w późniejszej sekcji, będzie go używać do uwierzytelniania).

Ustawianie zmiennych środowiskowych

Dla ułatwienia użyjemy powłoki Google Cloud. Jeśli chcesz to robić w swoim środowisku programistycznym, to świetnie. Pamiętaj, aby zainstalować pakiet SDK Google Cloud i biblioteki klienta w wybranym języku (ćwiczenia z programowania będą oparte na języku Python). Cloud Shell ma już zainstalowane biblioteki klienta. Przydatne, prawda?

Aby uruchomić kod za pomocą bibliotek, musisz ustawić dwie zmienne środowiskowe: jedną do określenia identyfikatora usługi i drugą, która pozwala określić plik klucza konta usługi. Skonfigurujmy je.

W swoim projekcie kliknij ikonę „>_"” w prawym górnym rogu konsoli internetowej, aby otworzyć Cloud Shell. Dodaj te zmienne środowiskowe, aby określić identyfikator projektu i ustawić ścieżkę do pliku klucza json:

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

Aby sprawdzić, czy zmienne zostały ustawione, użyj „echo”.

echo $GOOGLE_CLOUD_PROJECT
echo $GOOGLE_APPLICATION_CREDENTIALS

Otwórz edytor kodu w Cloud Shell

W konsoli Google Cloud otwórz Cloud Shell, klikając ikonę Cloud Shell w prawym górnym rogu.

W prawym górnym rogu Cloud Shell pojawi się seria ikon. Kliknij File -> Launch Code Editor (Plik -> uruchom edytor kodu), jak pokazano tutaj:

Utwórz firmę

Użyj polecenia Plik -> Nowy plik, aby utworzyć nowy plik źródłowy i wypełnij go poniżej. Nazwij go create_company.py.

cfirma_firmowa.py

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

Do czego służy ten kod? Odkrywajmy razem! Istnieją 2 odpowiednie wywołania biblioteki klienta:

  • client_service = build('jobs', 'v3') tworzy obiekt usługi za pomocą biblioteki klienta interfejsu Python Google API.
  • client_service.projects().companies().create(parent=project_id, body=request).execute() wykonuje wywołanie API, aby utworzyć firmę. Odpowiedź na to wywołanie to obiekt zawierający informacje o firmie. Zawartość zarówno obiektu żądania, jak i obiektu odpowiedzi jest opisana w dokumentacji metody utworzenia.

Uruchom plik z wiersza polecenia (który jest pomocny bezpośrednio pod oknem edytora kodu), a zobaczysz coś podobnego do tych wyników.

> 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 

name to unikalny identyfikator generowany przez Job Search API, a external_id to identyfikator podawany przez Ciebie w systemie pracy. Odwołując się do obiektu za pomocą interfejsu API, musisz użyć nazwy.

Zaktualizuj firmę

Jeśli w systemie jest już podmiot firmowy i chcesz dodać lub zmienić niektóre pola, proces zostanie podzielony na następujące etapy:

  • Utwórz obiekt z bieżącymi wartościami pól firmy
  • Zaktualizuj ten obiekt, dodając nowe lub zaktualizowane pola, używając pola firmy "name" jako klucza, aby interfejs API wiedział, którą firmę zaktualizować.
  • Prześlij nowy obiekt przy użyciu metody "poprawka".

Pamiętaj, że musisz mieć wszystkie bieżące wartości, ponieważ wszystkie są teraz zastępowane i nie ma znaczenia, które z nich zostały zaktualizowane. Oznacza to, że przed zaktualizowaniem informacji o firmie musimy je odzyskać.

Utwórz nowy plik update_company.py w obszarze roboczym. Zacznij od dodania metody get_company, która znajduje się poniżej.

update_company.py

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()

Jedną z rzeczy, o której warto zauważyć, jest to, że wywołanie interfejsu API wygląda bardzo podobnie do tworzenia firmy. Biblioteka klienta jest generowana zgodnie z interfejsem REST, dlatego operacje CRUD wykonywane w firmach będą miały postać client_service.projects().companies().theMethod(argName=argValue).execute().

Po przygotowaniu zbioru wartości, utwórz obiekt „poprawka” z nazwami pól do zaktualizowania i nowymi wartościami oraz wykorzystaj go do zaktualizowania obiektu firmy nowymi wartościami. Zrobiliśmy to w języku Python. Biblioteka klienta reprezentuje firmę jako obiekt słownikowy, co oznacza, że metoda jest już wbudowana. Nie musisz tworzyć pętli. Utwórz obiekt słownika tuż pod kodem, który masz już napisany.

update_company.py

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

Teraz pozostaje tylko utworzyć obiekt żądania (szczegóły znajdziesz w dokumentacji poprawki) i wykonać wywołanie interfejsu API.

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

Jeśli chcesz podać tylko te pola, które chcesz zmienić, możesz je dołączyć do maski aktualizacji. Jest to przydatne w sytuacjach, gdy nie masz jeszcze zaktualizowanego ustawienia obiektów firmy lub gdy masz tylko jedno pole, które chcesz zaktualizować, i nie chcesz przesyłać niepotrzebnie dużych obiektów w tę i z powrotem. Jak jednak użyć funkcji maskowania, o co prosisz? Gdzie znajduje się kod, który pokazuje, że jest to nowy i ekscytujący sposób na aktualizowanie informacji o firmie?

Czytasz w głowie. Poniższy fragment kodu prowadzi aktualizację informacji o firmie przy użyciu maski aktualizacji, a nie pełnej aktualizacji wpisu.

update_company.py

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

Wywołanie interfejsu API jest takie samo. Różnica polega na tym, że obiekt żądania zawiera teraz dwa pola (firma i maska_aktualizacji), a nie tylko jedno (firma). Maska aktualizacji ma postać listy pól oddzielonej przecinkami. Jeśli chcemy umieścić w masce pole „"websiteUri"”, wartość mase będzie wyglądać tak:

   mask = 'displayName,websiteUri'

Niezależnie od wybranej trasy uruchom to w Cloud Shell i (jeśli pozostawisz te instrukcje drukowania) w starej wersji, dane wyjściowe powinny dotyczyć zarówno starej, jak i nowej wartości dla Twojej firmy.

$ 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'}
$

Bez ofert pracy nie ma wiele sensu. W ostatniej sekcji rozmawialiśmy o tworzeniu firm. Zobaczmy teraz, jak tworzyć oferty pracy i sprawdzone metody współpracy.

Pamiętaj, że praca będzie dotyczyła firm. Jeśli nie masz jeszcze żadnych firm utworzonych za pomocą interfejsu API (lub udało Ci się uruchomić &&tt;delete" wywołanie na końcu sekcji i usunąć Twoją jedyną firmę), wróć i utwórz firmę ponownie. Teraz będziesz mieć możliwość tworzenia zadań.

Tworzenie zadania

Zacznijmy od utworzenia zadania.

Aby utworzyć zadanie, potrzebujesz tych danych:

  • Nazwa firmy. Ciąg tekstowy, który nie jest zrozumiały dla człowieka.
  • Identyfikator żądania dla oferty pracy. Jest podobny do identyfikatora external_id firmy – reprezentuje Twój unikalny identyfikator zadania, aby ułatwić synchronizację interfejsu Cloud Talent Solution API z obecnym rozwiązaniem, takim jak senior_llama_wrangler.
  • Tytuł stanowiska, który jest wyświetlaną nazwą.
  • Opis stanowiska. Pamiętaj, że opis może zawierać osadzony kod HTML, aby był poprawnie sformatowany. Treści są niejasne. & />
  • applicationInfo – więcej informacji o tym, jak złożyć wniosek. Może to być co najmniej 1 identyfikator URI, co najmniej 1 adres e-mail lub ciąg w formacie HTML z dalszymi instrukcjami. Możesz nawet umieścić wszystkie 3 ! Ale musisz podać co najmniej jeden.

Jeśli więc utworzymy zadanie dla naszej poprzedniej korporacji FooCorp, pola mogą wyglądać tak:

name

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

requisition_id

starsza_llama_wrangler

title

Starsza lama Wrangler

description

Doświadczony lama Wrangler jest wymagany na pełny etat. Musisz mieć zdolności przywódcze, w trakcie którego będziesz zabierać ze sobą opiekunki i przeszkadzasz ich w pełnym gronie.</lt> Naprawdę szybko. Oto kilka szybkich lam.

aplikacja_informacje

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

E-maile: llama-apply@example.com

Jeśli nie masz już nazwy firmy, możesz pobrać kod firmy "get_company&quot podany w kroku 3.

Kod do utworzenia zlecenia będzie bardzo podobny do kodu umożliwiającego utworzenie firmy. Pierwsze wiersze powinny być dla Ciebie znajome (importować bla bla, utwórz obiekt usługi klienta). Następnie tworzysz obiekt podyktowany (tylko zagnieżdżony zestaw par klucz/wartość) reprezentujący żądanie i wysyłasz go wraz z wywołaniem w interfejsie API „"create"”.

Wklej ten fragment w pliku create_job.py. Możesz nadać nazwę dowolną nazwę, ale w tym samouczku będzie to samo nazwa pliku.

create_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']

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

Uruchom go z powłoki Cloud Shell, co powinno zwrócić duży obiekt blob JSON z utworzonym zadaniem.

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

Jeśli otrzymasz zwrot podobny do powyższego, zadanie zostało utworzone.

Zadania muszą być unikalne

W ramach eksperymentu uruchom ponownie ten ostatni skrypt i sprawdźmy, co się stanie.

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

Co się tutaj stało? Próbujesz dodać zduplikowaną ofertę pracy. Ważne oferty pracy w systemie muszą być unikalne.

Niepowtarzalność jest określana na podstawie tych pól:

  • Nazwa firmy – wymagana przy tworzeniu zadania, której nie można zaktualizować
  • Identyfikator żądania – wymagany przy tworzeniu zadania, którego nie można aktualizować
  • Kod języka – opcjonalny (domyślnie pl_pl), aktualizowany

Jeśli każde zadanie, które chcesz utworzyć lub zaktualizować, zawiera wszystkie 3 z tych pól w połączeniu z istniejącym, nadal aktualnym zadaniem, zostanie ono uznane za duplikat, a zadanie będzie miało stan Nieudana z wyświetlonym wyżej komunikatem o błędzie.

Hurra!

Gratulacje, masz teraz w systemie zarówno ofertę firmy, jak i ofertę pracy. Zrobiłeś to w niecałą godzinę. Czy wiesz, ile czasu zajęło mi, jako czytelnika, najlepsze strony z ofertami pracy w internecie? To o ponad godzinę. Lubisz wiele innych rzeczy. Tygodnie. Miesiące. Spotkania spotkań. Prawdopodobnie pojawiły się arkusze kalkulacyjne i misje misji. Na pewno w tych biurach było już całkiem sporo. Wiesz, co Cię zajęło? Niecałą godzinę. Tak trzymaj.

To tylko niektóre z dostępnych możliwości. Dalej!

Aktualizowanie zadania

Podobnie jak w przypadku firm możemy pobrać ofertę pracy, aby ją wyświetlić, oraz poprawić ofertę pracy, aby ją zaktualizować.

Dowiedz się, jak uzyskać informacje o ofercie pracy. Jeśli poniższy fragment wygląda znajomo, oznacza to, że w poprzedniej sekcji wzięliśmy metodę "get_company " zastąpiliśmy &"company" "job" i dodaliśmy do zmiennej work_name. Zacznijmy od podania informacji o ofercie pracy.

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)

Aby zaktualizować zadanie, masz te same opcje co przed aktualizacją firmy: wyślij pełny obiekt ze zaktualizowanymi wartościami, aby zastąpić stary, lub prześlij mniejszą poprawkę za pomocą maski pola oddzielonej przecinkami.

update_job.py (aktualizacja z zastąpieniem całego obiektu)

   # 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 (tylko z nowymi wartościami pól i maską aktualizacji)

   # 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)   

Oba te działania działają dokładnie tak samo: zmieniają konkretną ofertę pracy w tytule o tytule zlecenia. Pamiętaj, że wiersz wywołujący interfejs API jest taki sam. Jedyna różnica jest w obiekcie żądania. Jeden ma pełny obiekt zadania, który zastąpi obiekt o tej nazwie. Drugi to zestaw pól do zaktualizowania.

Niezależnie od tego, który wybierzesz, dane wyjściowe będą takie same. Spróbuj, jeśli chcesz.

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

Hurra! Udało Ci się wykonać krok 4.

Ale teraz spójrzmy. Właśnie o to chodzi, aby zapewnić sobie produktywność. Do tej pory możesz tworzyć firmy, tworzyć oferty pracy i aktualizować obie usługi. Możesz jednak zauważyć, że niektóre lekcje nie wzbudzają Twoich ciekawości. To ostatnia operacja, w ramach której litera D znajduje się w wierszu C.R.U.D. Co w takim przypadku? Nie martw się, czytelniku! Szczegółowo opisujemy w następnej sekcji.

Rozpocznijmy od firm, ponieważ to za 5 minut ma to uzasadnić.

Usuwanie firmy

Usunięcie firmy jest łatwe. Korzystając z tych samych instrukcji importowania, które zostały użyte podczas tworzenia lub aktualizowania firmy, wywołaj metodę delete (przekazując nazwę firmy), bez konieczności wysyłania żądania treści.

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

Aby pomóc Ci w czyszczeniu zasobów w trakcie używania tego interfejsu API, możesz skorzystać z prostego skryptu w języku Python, który pobiera nazwę firmy jako parametr wiersza poleceń i jak się pewnie domyślasz, usuwa ją.

usuń_firmę.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

Wywołaj ją, podając nazwę firmy jako jedyny argument wiersza poleceń.

$ 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==">

I to wszystko! Sukces! Chwileczkę. A to co? Błąd? "Nadal prowadzi oferty pracy&quot?

Tak. Teraz znasz już pierwszą regułę usuwania firm: ta operacja zakończy się niepowodzeniem, jeśli firma nadal ma otwarte stanowiska. Jak sobie z tym radzimy? Musimy usunąć wszystkie otwarte oferty pracy związane z tą firmą.

Teraz możecie skasować nowo utworzoną pracę, a następnie usunąć firmę, z którą się współpracuje. To zrozumiałe, czytelniku! Zróbmy to.

usuń_firmę.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

Teraz spróbuj go uruchomić. Wartości zwracane w tych wywołaniach interfejsu API powinny być puste i odpowiadać bieżącej &firmie &#quot;praca&quot.

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

Aha. Gratulacje.

Jeszcze jedna sprawa. Powyższe rozwiązanie zadziałało świetnie, ponieważ

  • Mam już nazwę stanowiska dla wszystkich istniejących ofert pracy w tej firmie.
  • Utworzono zbyt wiele, aby usunąć ręcznie oferty pracy związane z tą firmą.

Powiedzmy, że tak nie było

Wywołanie interfejsu API jobs.list(), które zwróci zadania pasujące do określonego identyfikatora projektu i firmy nadrzędnej. Oto sposób wywołania metody:

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')))

Teraz możesz tworzyć oferty pracy i zarządzać nimi, korzystając z interfejsu Google Cloud Talent Solutions Job Search API.

Omawiane zagadnienia

  • Tworzenie firm i zarządzanie nimi
  • Tworzenie ofert pracy dla tych firm i zarządzanie nimi
  • Konfigurowanie kont usługi w celu korzystania z interfejsu API w Twoim imieniu

Więcej informacji