Job Search API با Google Cloud

در این نرم افزار کد می آموزید که چگونه با استفاده از Cloud Talent Solution API (CTS) کاریابی و استعدادیابی را برای سازمان خود افزایش دهید. با استفاده از CTS می توانید قدرت یادگیری ماشینی را به تجربه جستجوی شغل خود اضافه کنید!

چیزی که یاد خواهید گرفت

  • CTS را در پروژه Google Cloud خود فعال کنید
  • در آن شرکت ها نهادها و مشاغل "شرکتی" ایجاد کنید

آنچه شما نیاز دارید

  • یک پروژه Google Cloud با صورت‌حساب قبلاً راه‌اندازی شده است (اگر قبلاً ندارید، یکی ایجاد کنید .
  • حدود یک ساعت

چگونه از این آموزش استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه قبلی خود را با Google Cloud Platform چگونه ارزیابی می کنید؟

تازه کار حد واسط کارشناس

این آموزش برای اجرای کامل در پلتفرم Google Cloud طراحی شده است. هیچ بارگیری در ایستگاه کاری شما لازم نیست.

فعال کردن Cloud Talent Solutions API

برنامه خود را در کنسول Cloud باز کنید و روی منوی همبرگر در بالا سمت چپ کلیک کنید. منوها را به Talent Solution -> Overview مرور کنید.

از آنجایی که این یک پروژه جدید است، به صفحه جدیدی هدایت می شوید که از شما می خواهد API را فعال کنید. روی فعال کردن کلیک کنید و چند دقیقه صبر کنید تا API برای این پروژه روشن شود.

ثبت داده ها را فعال کنید

اکنون به صفحه نمای کلی قبلی برگردید. یک گفتگوی جدید ظاهر می‌شود که از شما می‌خواهد ثبت داده‌ها را فعال کنید (اگر اینطور نیست، به صفحه گفتگوی قبلی بازگردید). این واقعاً فقط برای اطمینان از اینکه می‌دانید Job Search API توسط یک مدل یادگیری ماشینی که به داده نیاز دارد، ارائه می‌شود. به عنوان بخشی از ادغام، در واقع می توانید رویدادهایی را از کاربرانی که در جستجوی آموزش بیشتر آن مدل ها هستند، ارسال کنید. هنگامی که این از طریق کد پیاده سازی می شود، می توانید مشخص کنید که چه اطلاعاتی ارسال می شود.

ما عمیق‌تر به این خواهیم پرداخت که آن رویدادها چیست و چگونه می‌توان آنها را بعداً ارسال کرد، اما مدل‌های از پیش آموزش‌دیده به خوبی کار خواهند کرد. پیش بروید و ثبت داده ها را فعال کنید، سپس روی "اتصالات حساب سرویس" در سمت چپ این گفتگو کلیک کنید.

یک حساب سرویس راه اندازی کنید

هنگام درخواست API، باید آنها را از طرف یک حساب احراز هویت شده واقعی ارسال کنید. بهترین روش Google Cloud Platform راه اندازی یک حساب سرویس برای این کار را توصیه می کند. حساب‌های سرویس را راهی آسان برای راه‌اندازی کاربران احراز هویتی که مجوزهای محدودی دارند، در نظر بگیرید. این به شما کمک می کند تا یک سیستم مستقل و امن بسازید.

برای مثال، برای استفاده از Job Search API به یک حساب سرویس نیاز داریم. بیایید یکی بسازیم و با استفاده از «ویرایشگر شغل» در بخش «راه حل استعدادهای ابری» در ناوبری سمت چپ، مجوز خواندن/نوشتن به آن بدهیم. همچنین می توان یک حساب سرویس را فقط با "Job Viewer" تنظیم کرد تا فقط دسترسی فقط خواندنی داشته باشد.

مرحله بعدی از شما می پرسد که آیا می خواهید به کاربران اجازه دسترسی به این حساب سرویس را بدهید یا خیر. می‌توانید از این مرحله رد شوید، اما حتماً روی «ایجاد کلید» در نزدیکی پایین کلیک کنید. برای نوع کلید "JSON" و سپس "Create" را انتخاب کنید. یک فایل اعتبارنامه جدید JSON به طور خودکار دانلود می شود. این فایل را در سرور خود ذخیره کنید، کدی که در بخش بعدی می نویسید از آن برای احراز هویت استفاده می کند.

تنظیم متغیرهای محیطی

برای راحتی، از پوسته Google Cloud استفاده خواهیم کرد. اگر می‌خواهید این کار را از محیط توسعه خودتان انجام دهید، عالی است! اطمینان حاصل کنید که Google Cloud SDK و کتابخانه های سرویس گیرنده را به زبان انتخابی خود نصب کرده اید (این لبه کد از Python استفاده می کند.). Cloud Shell قبلاً کتابخانه های کلاینت ابری را نصب کرده است. دستی، درسته؟

برای اجرای کد با استفاده از کتابخانه ها، باید مطمئن شوید که دو متغیر محیطی تنظیم شده اند: یکی برای تعیین شناسه porject شما، دیگری برای مشخص کردن فایل کلیدی حساب کاربری شما. بیایید آنها را تنظیم کنیم.

از پروژه خود، روی نماد ">_" در سمت راست بالای کنسول وب خود کلیک کنید تا یک پوسته ابری باز شود. متغیرهای محیطی زیر را اضافه کنید تا ID پروژه خود را مشخص کنید و یک مسیر برای فایل کلید json خود تعیین کنید:

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

برای تأیید تنظیم بودن متغیرها، از «echo» استفاده کنید.

echo $GOOGLE_CLOUD_PROJECT
echo $GOOGLE_APPLICATION_CREDENTIALS

ویرایشگر کد را در Cloud Shell باز کنید

از کنسول Google Cloud، Cloud Shell را با استفاده از نماد پوسته ابری در بالا سمت راست باز کنید.

در امتداد سمت راست بالای پوسته ابر یک سری نماد وجود دارد. همانطور که در اینجا نشان داده شده است، روی File -> Launch Code Editor کلیک کنید:

یک شرکت ایجاد کنید

از File -> New File برای ایجاد یک فایل منبع جدید استفاده کنید و آن را با محتوای زیر پر کنید. آن را create_company.py بنامید .

c reate_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 python ایجاد می کند.
  • 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 به یک شی ارجاع می دهید، باید از نام آن استفاده کنید.

به روز رسانی شرکت

اگر قبلاً یک نهاد شرکتی در سیستم دارید و می‌خواهید برخی از فیلدها را اضافه یا تغییر دهید، فرآیند به مراحل زیر تقسیم می‌شود:

  • یک شی با مقادیر فیلد فعلی برای شرکت ایجاد کنید
  • آن شی را با فیلدهای جدید یا به روز شده، با استفاده از فیلد "نام" شرکت به عنوان کلید به روز کنید تا 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" با نام فیلدهایی که می خواهید به روز شوند و مقادیر جدید آنها ایجاد کنید و از آن برای به روز رسانی شی شرکت خود با مقادیر جدید استفاده کنید. در اینجا جالب است که انجام این کار در پایتون چیست -- کتابخانه مشتری شرکت را به عنوان یک شیء فرهنگ لغت نشان می دهد، به این معنی که روش قبلاً ساخته شده است. بدون حلقه فانتزی لازم است! یک شی دیکشنری درست زیر کدی که قبلاً نوشته اید ایجاد کنید.

update_company.py

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

اکنون تنها کاری که باید انجام دهید این است که یک شی درخواست ایجاد کنید ( برای جزئیات بیشتر در مورد آنچه می‌تواند در آنجا قرار گیرد به اسناد Patch مراجعه کنید) و فراخوانی 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 ) است. ماسک به‌روزرسانی فهرستی از فیلدها با کاما است. اگر بخواهیم فیلد "websiteUri" را در ماسک اضافه کنیم، در عوض مقدار mask به شکل زیر خواهد بود:

   mask = 'displayName,websiteUri'

هر مسیری را که انتخاب می‌کنید، آن را از پوسته ابری اجرا کنید، و (با فرض اینکه آن عبارات چاپی را در آن جا گذاشته‌اید) باید خروجی را ببینید که هم مقادیر قدیمی و هم جدید را برای شرکت شما نشان می‌دهد.

$ 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 ایجاد نکرده‌اید (یا اگر با موفقیت تماس «حذف» را در انتهای بخش اجرا کردید و تنها شرکت خود را حذف کردید) برگردید و دوباره یک شرکت ایجاد کنید. سپس شما آماده ایجاد شغل خواهید بود!

شغل ایجاد کنید

بیایید با ایجاد شغل شروع کنیم!

برای ایجاد شغل، به داده های زیر نیاز دارید:

  • نام شرکت. نه رشته "My fancy company LLC" قابل خواندن توسط انسان، بلکه رشته بسیار طولانی تر "projects/[PROJECT_ID]/companies/COMPANY_ID".
  • شناسه درخواست برای کار این شبیه شناسه خارجی یک شرکت است - شناسه منحصربه‌فرد شما را برای کار نشان می‌دهد تا همگام‌سازی Cloud Talent Solution API با راه‌حل شغل فعلی‌تان را آسان‌تر کند، به عنوان مثال senior_llama_wrangler.
  • عنوان شغل، که نام نمایشی آن شغل است، به عنوان مثال "Senior Llama Wrangler."
  • شرح شغل. توجه داشته باشید که توضیحات می تواند حاوی HTML تعبیه شده باشد تا بتوانید آن را به درستی قالب بندی کنید. محتوا کاملاً خود توضیحی است. "<p>گروهی از جنگجویان لاما را رهبری خواهد کرد.</p><p> باید توانایی رهبری و تجربه با لاماها را داشته باشد."</p>
  • applicationInfo - اطلاعات بیشتر در مورد نحوه درخواست. می‌تواند بیش از ۱ uris، ۱+ آدرس ایمیل، یا یک رشته قالب‌بندی شده HTML با دستورالعمل‌های بیشتر باشد. شما حتی می توانید هر 3 را نیز شامل کنید! اما باید حداقل 1 مورد را وارد کنید.

بنابراین اگر بخواهیم برای شرکتی که قبلاً ایجاد کرده بودیم، شغلی ایجاد کنیم، این زمینه ها ممکن است شبیه به این باشند:

نام

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

Requisition_id

senior_llama_wrangler

عنوان

ارشد لاما رانگلر

شرح

لاما رانگلر با تجربه برای یک موقعیت تمام وقت مورد نیاز است. توانایی رهبری مورد نیاز است، زیرا شما تیمی از مراقبین لاما را انتخاب می‌کنید و آنها را تا مبارزان تمام عیار آموزش می‌دهید.<p/>باید به خوبی با حیوانات کار کرد و گهگاه برای دویدن واقعاً بسیار سریع آماده بود. مثل واقعا سریع. اینها چند لاما سریع هستند.

application_info

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

ایمیل: llama-apply@example.com

اگر دیگر نام شرکت را ندارید، می توانید از کد "get_company" که در مرحله 3 استفاده کرده اید برای بازیابی آن استفاده کنید.

کد ایجاد شغل بسیار شبیه به کد ایجاد یک شرکت خواهد بود. چند خط اول باید برای شما کاملاً آشنا باشد (وارد کردن بلاههههه، شیء خدمات مشتری فوری). سپس یک شی dict ایجاد می کنید (فقط مجموعه ای تو در تو از جفت های کلید/مقدار) که نمایانگر درخواست شما است و آن را همراه با فراخوانی "ایجاد" 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، قابل به‌روزرسانی

اگر هر کاری که می‌خواهید ایجاد یا به‌روزرسانی کنید، دارای هر 3 فیلد مشترک با یک کار موجود و منقضی نشده باشد، تکراری در نظر گرفته می‌شود و ایجاد/به‌روزرسانی با آن پیام خطایی که در بالا می‌بینید ناموفق است.

هورا!

تبریک می گوییم، شما اکنون هم یک شرکت و هم یک لیست شغلی برای آن شرکت در سیستم خود دارید! و شما تمام این کارها را در کمتر از یک ساعت انجام دادید! آیا هیچ ایده ای دارید که بهترین سایت های لیست مشاغل در اینترنت چقدر طول کشید تا به این نقطه رسیدند، خواننده؟ خیلی بیشتر از یک ساعت بیشتر دوست دارم هفته ها ماه ها. جلسات هیئت مدیره احتمالاً صفحه‌گسترده‌ها و بیانیه‌های مأموریتی در آن نقش داشته‌اند. من مطمئن هستم که در آن دفاتر کاملا واقعی بود. میدونی چی برات گرفت؟ کمی کمتر از یک ساعت برو تو!

هر چند بیشتر وجود دارد! بیا ادامه بدیم.

به روز رسانی یک شغل

درست مانند شرکت‌ها، می‌توانیم برای دیدن جزئیات آن شغلی پیدا کنیم و برای به‌روزرسانی آن کار را اصلاح کنیم.

در اینجا نحوه دریافت جزئیات کار آمده است. اگر قطعه زیر آشنا به نظر می رسد، به این دلیل است که ما متد "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)   

دو قطعه بالا دقیقاً یک کار را انجام می دهند: آنها یک لیست شغلی خاص را با عنوان شغل "مهندس جذب لاما سرکش" به روز می کنند. همچنین توجه داشته باشید که خطی که فراخوانی 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 را در CRUD قرار می دهد. اگر بخواهیم آنها را حذف کنیم چه؟ نگران نباش خواننده! بخش بعدی به تفصیل به این موضوع می پردازد.

بیایید با شرکت‌ها شروع کنیم، به دلایلی که در حدود 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 از طرف شما

بیشتر بدانید