Job Search API עם Google Cloud

ב-Codelab הזה תלמדו איך לשפר את חיפוש המשרות והכשרונות בארגון שלכם באמצעות Cloud Talent Solution API (CTS). באמצעות CTS אפשר להוסיף את העוצמה של הלמידה החישובית לחוויה בחיפוש עבודה!

מה תלמדו

  • הפעלת CTS בפרויקט שלך ב-Google Cloud
  • צור "Company" ישויות ועבודות בחברות אלה

מה צריך?

  • פרויקט ב-Google Cloud עם חיוב שכבר הוגדר (אם עדיין לא הגדרתם פרויקט, יוצרים פרויקט).
  • כשעה

איך תשתמשו במדריך הזה?

לקרוא אותו בלבד לקרוא אותו ולהשלים את התרגילים

איך היית מדרג את החוויה הקודמת שלך ב-Google Cloud Platform?

מתחילים מומחים מומחים

המדריך הזה נועד להפעלה מלאה ב-Google Cloud Platform. אין צורך להוריד את תחנת העבודה.

הפעלת Cloud Talent Solutions API

פותחים את האפליקציה ב-Cloud Console ולוחצים על תפריט ההמבורגר בפינה הימנית העליונה. מעיינים בתפריטים אל פתרון כשרות -> סקירה כללית.

מאחר שמדובר בפרויקט חדש, נפנה אותך למסך חדש שבו נבקש ממך להפעיל את ה-API. לוחצים על 'הפעלה' ומחכים כמה דקות עד שה-API יופעל בפרויקט הזה.

הפעלה של רישום נתונים

עכשיו חוזרים לדף הסקירה הכללית מהעבר. תופיע תיבת דו-שיח חדשה שבה תתבקשו להפעיל רישום נתונים (אם היא לא מופיעה), עליכם לחזור לדף תיבת הדו-שיח קודם. לשם כך, צריך לדעת שה-Job Search API מופעל באמצעות מודל למידה חישובית שזקוקים לנתונים. כחלק מהשילוב, תהיה לך אפשרות לשלוח אירועים ממשתמשים שרוצים לאמן את המודלים האלה עוד. כשהאפשרות הזו מיושמת באמצעות קוד, אפשר לציין איזה מידע יישלח.

נבחן לעומק את האירועים האלה ואיך אפשר לשלוח אותם מאוחר יותר, אבל המודלים שהוכשרו מראש יפעלו היטב. הפעילו את רישום הנתונים ביומן, ולאחר מכן לחצו על &מירכאות;חיבורי חשבון לשירות; בסרגל הניווט הימני בתיבת דו-שיח זו.

הגדרת חשבון שירות

כששולחים בקשות API, צריך לשלוח אותן בשם חשבון מאומת בפועל. לפי השיטות המומלצות של Google Cloud Platform, מומלץ להגדיר חשבון שירות לשם כך. כדאי לחשוב על חשבונות שירות כדי להגדיר משתמשים מאומתים שיש להם הרשאות מוגבלות. זה יעזור לך ליצור מערכת עצמאית ומאובטחת.

לדוגמה, אנחנו צריכים חשבון שירות כדי להשתמש ב-Job Search API. &&39;כדי ליצור קובץ כזה ולתת לו הרשאות קריאה/כתיבה באמצעות "Job Editor" בקטע "Cloud Talent Resolution" בחלונית הניווט שמימין. אפשר גם להגדיר חשבון שירות עם "JobView" כדי שתהיה לו גישה לקריאה בלבד.

בשלב הבא, תשאלו אם אתם רוצים להעניק למשתמשים גישה לחשבון השירות הזה. ניתן לדלג על שלב זה, אבל חשוב ללחוץ על "יצירת מפתח&ציטוט; בחלק התחתון של המסך. "JSON" עבור סוג המפתח, ולאחר מכן "Create" מתבצעת הורדה אוטומטית של קובץ פרטי הכניסה של JSON. יש לאחסן את הקובץ הזה בשרת שלך, הקוד שיכתוב בקטע מאוחר יותר ישמש אותו לאימות.

הגדרה של משתני סביבה

לנוחיותכם, נשתמש במעטפת של Google Cloud. אם ברצונך לעשות זאת מסביבת הפיתוח שלך, נהדר! מקפידים להתקין את Google Cloud SDK ואת ספריות הלקוחות בשפה הרצויה (קוד Lab זה ישתמש ב-Python). ב-Cloud Shell כבר יותקנו ספריות של לקוחות בענן. נכון?

כדי להריץ קוד באמצעות הספריות, צריך לוודא ששני משתני סביבה מוגדרים: אחד כדי לציין את מזהה ההפניה, והשני כדי לציין את קובץ המפתח של חשבון השירות. כדאי להגדיר אותם.

בפרויקט, לוחצים על הסמל ">_" בפינה השמאלית העליונה של מסוף האינטרנט כדי לפתוח מעטפת בענן. צריך להוסיף את משתני הסביבה הבאים כדי לציין את מזהה הפרויקט ולהגדיר נתיב לקובץ של מפתח ה-json:

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

כדי לוודא שהמשתנים הוגדרו, משתמשים ב-eאקו.

echo $GOOGLE_CLOUD_PROJECT
echo $GOOGLE_APPLICATION_CREDENTIALS

פותחים את עורך הקוד ב-Cloud Shell

ב-Google Cloud Console, פותחים את Cloud Shell באמצעות סמל Cloud Cloud בצד שמאל למעלה.

בפינה השמאלית העליונה של קונכיה ענן תוצג סדרה של סמלים. לוחצים על File -> Update Code Editor, כפי שמוצג כאן:

יצירת חברה

משתמשים באפשרות קובץ -> קובץ חדש כדי ליצור קובץ מקור חדש, וממלאים אותו בתוכן שבהמשך. קוראים לו create_company.py.

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


# 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

מה קוד זה עושה? קדימה, מתחילים! יש כאן שתי קריאות רלוונטיות לספריית הלקוחות:

  • client_service = build('jobs', 'v3') יוצר אובייקט שירות באמצעות ספריית הלקוח לפייתון של Google API.
  • האפליקציה client_service.projects().companies().create(parent=project_id, body=request).execute() מבצעת את הקריאה ל-API כדי ליצור את החברה. התגובה לשיחה הזו היא אובייקט שמכיל את פרטי החברה. התוכן של אובייקט הבקשה ואובייקט התגובה מפורט בתיעוד עבור שיטת היצירה .

מריצים את הקובץ משורת הפקודה (שמתבצעת באופן ישיר מתחת לחלון של עורך הקוד), ומופיע משהו הדומה לפלט הבא.

> 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 

השם הוא המזהה הייחודי שנוצר על ידי ה-Job Search API, וה-external_id הוא המזהה שאתם מספקים ממערכת המשרות. בכל פעם שמפנה לאובייקט דרך ה-API, צריך להשתמש בשם.

עדכון החברה

אם כבר יש לכם ישות חברה ואתם רוצים להוסיף או לשנות שדות מסוימים, התהליך מפורט לפי השלבים הבאים:

  • יצירת אובייקט עם ערכי השדות הנוכחיים של החברה
  • לעדכן את האובייקט עם השדות החדשים או המעודכנים, באמצעות השדה "name" כמפתח, כדי ש-API יוכל לדעת איזו חברה לעדכן
  • שולחים את האובייקט החדש באמצעות השיטה "patch" .

הערה: בתהליך הזה צריך להגדיר את כל הערכים הקיימים בבת אחת, כי הם מחליפים את כל ערכי החברה בבת אחת, ללא קשר לערכים שעדכנתם בפועל. כלומר, לפני שנעדכן את פרטי החברה, עלינו לאחזר אותם.

יוצרים קובץ חדש, update_company.py בסביבת העבודה. כדי להפעיל את האפשרות הזו, צריך להוסיף את שיטת get_company שמוצגת למטה.

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

דבר אחד שיש לשים לב בשלב זה הוא שקריאה ל-API נראית דומה מאוד ליצירת חברה. ספריית הלקוח נוצרת כדי להתאים לממשק REST, כך שפעולות CRUD שאתה מבצע בחברות מועברות לטופס client_service.projects().companies().theMethod(argName=argValue).execute().

עכשיו, אחרי שקבענו את קבוצת הערכים הקיימים, יוצרים אובייקט "patch" עם שמות השדות שרוצים לעדכן, והערכים שלהם, ומשתמשים בהם כדי לעדכן את האובייקט של החברה בערכים חדשים. כאן מהנים לעשות זאת ב-Python -- ספריית הלקוח מייצגת את החברה כאובייקט מילון, כלומר, השיטה כבר מובנית. אין צורך בלולאה מפוארת! יצירה של אובייקט מילון מתחת לקוד שכבר כתבת.

update_company.py

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

הדבר היחיד שצריך לעשות הוא ליצור אובייקט בקשה (לפרטים, יש לעיין בתיעוד של התיקון ולבדוק מה אפשר להיכנס לשם) ולהפעיל את הקריאה ל-API.

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

לחלופין, אם רוצים לספק רק את השדות שרוצים לשנות, אפשר לכלול את השדות יחד עם מסיכת עדכון. אפשרות זו שימושית במצבים שבהם עדיין אין לכם הגדרה מעודכנת של אובייקט חברה, או אם יש לכם רק שדה אחד שאתם רוצים לעדכן ואינכם רוצים לשלוח אובייקטים גדולים שלא לצורך. אבל איך משתמשים במסכת עדכון, אתם שואלים? איפה נמצא הקוד שמדגים את הדרך המלהיבה והחדשנית הזו לעדכון פרטי החברה?

אתם קוראים את המחשבות שלנו, קוראים! קטע הקוד שבהמשך מבצע עדכון של פרטי החברה באמצעות מסכת עדכון במקום החלפת רשומה מלאה.

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

שימו לב: הקריאה ל-API זהה. ההבדל הוא שבאובייקט הבקשה יש עכשיו שני שדות (company ו-update_mask), במקום רק שדה אחד (company). מסכת העדכון היא רשימת שדות המופרדים בפסיקים. אם אנחנו רוצים לכלול את השדה "websiteUri" במסכה, ערך המסכה אמור להיראות כך:

   mask = 'displayName,websiteUri'

בכל נתיב שתבחרו, מריצים אותו מהמעטפת של Cloud, ובהנחה שהשארתם את דף הדוחות הזה בפלט) אתם אמורים לראות פלט שמציין גם את הערך הישן וגם את הערך החדש של החברה.

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

אין הרבה צורך בפתרון של חיפוש עבודה ללא משרות שאפשר לחפש! בקטע האחרון דיברנו על יצירת חברות. עכשיו נדבר על יצירת משרות ושיטות מומלצות לעבודה איתם.

לתשומת ליבך, משרות יתווספו לחברות. אם עדיין אין לכם חברות שנוצרו באמצעות ה-API (או אם הפעלתם בהצלחה את ההוראה "delete" בסוף הקטע והסרתם את החברה היחידה), צריך לחזור וליצור חברה. לאחר מכן, תוכלו ליצור משרות!

יצירת עבודה

קדימה, מתחילים ליצור עבודה!

כדי ליצור עבודה, תצטרכו את הפרטים הבאים:

  • השם של החברה. לא המחרוזת האנושית הנקראת "החברה המהודרת שלי LLC" אבל המחרוזת הרבה יותר "projects/[PROJECT_ID]/companies/Company_ID"
  • מזהה דרישה לעבודה זו. המזהה דומה ל-external_id של חברה – הוא מייצג מזהה ייחודי משלכם לעבודה, כדי שיהיה קל יותר לסנכרן את ה-Cloud Talan Solution API עם פתרון העבודה הנוכחי שלכם, כמו בכיר_llama_wrangler
  • title [שם_פריט] של המשרה. זהו השם המוצג של המשרה. למשל, "Llama Wrangler."
  • תיאור המשרה. לתשומת ליבכם, התיאור יכול להכיל HTML מוטמע כדי לעצב אותו כראוי. התוכן הוא הסבר די עצמאי. "<p>י יוביל את הצוות של לאמה Wrangler.</p><p> חייב להיות בעל מנהיגות וניסיון עם LAAma."</p>
  • applicationInfo – מידע נוסף על אופן הגשת הבקשה. ניתן להזין יותר מכתובת URL אחת, יותר מכתובת אימייל אחת, או מחרוזת בפורמט HTML עם הוראות נוספות. אפשר אפילו לכלול את כל ה-3 ! עם זאת, עליכם לכלול ערך אחד לפחות.

אם היינו יוצרים משימה לתאגיד שלנו FooCorp שנוצר בעבר, כך השדות עשויים להיראות:

name

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

requisition_id

adult_llama_wrangler

title [שם_פריט]

לאמה ורגל בכירה

description [תיאור]

לאמר נגרים מנוסים לעבודה במשרה מלאה. נדרשת מנהיגות, כי מדובר בצוות של מטפלי לאמה ומלמדים אותם איך ליצור דמויות רחבות ידיים.<p/>צריך לעבוד היטב עם בעלי חיים, ובמקרים מסוימים כדאי להתכונן לפעילות מהירה במיוחד. ממש מהיר. אלה כמה לאמות מהירות.

application_info

URI: http://www.example.com/llama_wrזוויתr_Application/

הודעות אימייל: llama-apply@example.com

אם אין לכם יותר את שם החברה, תוכלו להשתמש בקוד "get_company" שבו השתמשתם בשלב 3 כדי לאחזר אותו.

הקוד ליצירת משימה ייראה דומה מאוד לקוד ליצירת חברה. השורות הראשונות צריכות להיות מוכרות לכם (ייבוא ה'בלה בלה', אובייקט של שירות הלקוחות המיידי). לאחר מכן יוצרים אובייקט הכתבה (רק קבוצה של צמדי מפתח/ערך מקוננים) שמייצגת את הבקשה, ושולחים אותה יחד עם הקריאה ל-API ;"

מדביקים את קטע הקוד הבא בקובץ שנקרא Create_job.py. אפשר לתת לו שם בכל שם, אבל המדריך הזה ייחשב בתור שם הקובץ.

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

מריצים את השילוב הזה מהמעטפת בענן וצריכים לחזור על בועה גדולה של JSON באמצעות העבודה שיצרתם.

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

אם תחזירו משהו כמו שמתואר למעלה, יצרתם בהצלחה עבודה.

המשרות צריכות להיות ייחודיות

כניסוי, מריצים את הסקריפט האחרון שוב ובודקים מה קורה.

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

מה קרה פה? ניסית להזין רישום עבודה כפול. משרות שלא פגו חייבות להיות ייחודיות במערכת.

ייחודיות נקבעת לפי השדות הבאים:

  • שם החברה – נדרש בעת יצירת המשרה, לא ניתן לעדכן
  • מזהה דרישה – חובה בעת יצירת עבודה, לא ניתן לעדכן
  • קוד שפה – אופציונלי, ברירת המחדל היא en_us, ניתן לעדכן

אם אתם מנסים ליצור או לעדכן משימה כלשהי, ביחד עם כל שלושת השדות האלה, ביחד עם משימה קיימת שלא פג תוקפה, היא נחשבת לעותק משוכפל, והיא יוצרת/מעדכנת כשל, ומופיעה בה הודעת השגיאה שלמעלה.

מעולה!

מזל טוב, עכשיו יש לך גם חברה וגם רישום משרה עבור החברה הזו במערכת שלך! והשלמת את כל המשימות האלה תוך פחות משעה! יש לכם מושג כמה זמן עבר עד שאתרי המשרות הטובים ביותר באינטרנט הגיעו לנקודה הזו? הרבה יותר משעה. כמו הרבה. שבועות. חודשים. פגישות מועצת המנהלים. היו כנראה גיליונות אלקטרוניים והצהרות מטרה. אני בטוח שזה די אמיתי במשרדים האלה. איך זה קרה לכם? קצת פחות משעה. קדימה, לעבודה!

אבל יש עוד! בואו נמשיך.

עדכון משרה

בדיוק כמו עם חברות, אנחנו יכולים לקבל עבודה כדי לראות את הפרטים שלה ולעדכן עבודה כדי לעדכן אותה.

כך מקבלים את פרטי המשרה. אם קטע הקוד שבהמשך נראה מוכר, הוא חל על שיטת "get_company" כתוצאה מהקטע הקודם, והחלפנו את "company" ו-"job" והוספנו את המשתנה 'Job_name'. בואו נבחן תחילה את פרטי המשרה.

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)

כדי לעדכן את העבודה בפועל, עומדות לרשותכם אותן אפשרויות כמו כשעדכנתם את החברה: שולחים אובייקט מלא עם ערכים מעודכנים כדי להחליף את העבודה הישנה, או שולחים תיקון קטן יותר עם מסיכת שדה המופרדת בפסיקים.

update_job.py (עדכון עם החלפה מלאה של אובייקטים)

   # 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 (רק עם ערכי השדות החדשים ומסכת עדכון)

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

שני קטעי הטקסט שלמעלה מבצעים את אותו הדבר: הם מעדכנים את פרסום המשרה הספציפי בשם הכותר "Rogue Llama Acquisition Engineer" כמו כן, יש לשים לב שהשורה שמבצעת את הקריאה ל-API זהה: ההבדל היחיד הוא באובייקט הבקשה. לאובייקט אחד יש אובייקט עבודה מלא שיחליף את האובייקט בשם השם הזה. השדה השני הוא פשוט קבוצת שדות לעדכון.

בכל מחרוזת שתבחרו, הפלט יהיה זהה. רוצה לנסות?

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

שלום! השלמת את שלב 4!

עכשיו להסתכל על זה. תראי את כל זה כעל מפלצת לשיפור הפרודוקטיביות. עד עכשיו, אפשר ליצור חברות, ליצור משרות ולעדכן את שתיהן בבת אחת! אבל ייתכן שהבחנתם במשהו חסר בשיעורים האלה. הפעולה האחרונה שמציינת את ה-D בC.R.U.D. מה קורה אם רוצים למחוק אותם? אל דאגה, הקורא! הקטע הבא מכיל הסבר מפורט.

בואו נתחיל עם חברות, מסיבות שנראות הגיוניות יותר בעוד כ-5 דקות.

מחיקת חברה

קל למחוק חברה. השתמשו באותן הצהרות ייבוא שביצעתם כשיצרתם או עדכנתם חברה. לשם כך, קראו את שיטת המחיקה והזינו רק את שם החברה (אין צורך בגוף הבקשה).

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

כדי לעזור לכם בניקיון בזמן שאתם בודקים את ה-API הזה, הנה סקריפט פיתון פשוט שמשתמש בשם חברה כפרמטר לשורת הפקודה, וניחותם שהוא מוחק את החברה.

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

קוראים לו ומעבירים את שם החברה כארגומנט היחיד של שורת הפקודה.

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

זהו, אתה מוכן! הצלחת. יש להמתין שנייה אחת. מה זה? שגיאה? " עדיין יש עבודות פתוחות"?

כן! עכשיו אתם יודעים את הכלל הראשון למחיקת חברות: כל עוד החברה הזו עדיין לא עומדת בדרישות, היא תיכשל. איך אנחנו מטפלים בזה? עלינו לעבור ולמחוק את כל המשרות הפנויות המשויכות לחברה הזו.

עכשיו הדבר ההגיוני לחלוטין, זה שלדעתך זה הגיוני, קורא! קדימה!

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

עכשיו אפשר לנסות להריץ אותו שוב. הערכים שמוחזרים מקריאות ה-API האלה צריכים להיות ריקים. הערכים של המירכאות הנוכחיות צריכים להיות ריקים.

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

אההה. כל הכבוד.

רק עוד משהו אחרון. הפתרון שצוין למעלה עבד טוב כי אתה, הקורא,

  • כבר היה את שם המשרה עבור כל המשרות הקיימות עבור החברה הזו.
  • לא נוצר "יותר מדי פריטים למחיקה ידנית עבור העבודה של החברה הזו.

נראה כאילו זה לא היה נכון

יש קריאה ל-API, jobs.list(), שתחזיר משימות שתואמות למזהה פרויקט ולחברה-אם שצוינו. כך אתה קורא לשיטה:

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

עכשיו אפשר ליצור ולנהל דפים עסקיים של חברות ומשרות באמצעות Google Cloud Talent Solutions Job Search API.

מה כללנו?

  • יצירה וניהול של חברות
  • יצירה וניהול של משרות פנויות לחברות אלה
  • הגדרת חשבונות שירות לשם אינטראקציה עם ה-API בשמך

מידע נוסף