API tìm kiếm việc làm với Google Cloud

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách nâng cao khả năng tìm kiếm việc làm và thu nạp nhân tài cho tổ chức của mình bằng API Giải pháp nhân tài trên đám mây (CTS). Bằng cách sử dụng CTS, bạn có thể thêm sức mạnh của công nghệ máy học vào trải nghiệm tìm kiếm việc làm của mình!

Kiến thức bạn sẽ học được

  • Bật CTS trong dự án Google Cloud của bạn
  • Tạo "Company" các công ty và công việc tại các công ty đó

Bạn cần có

  • Một dự án Google Cloud đã thiết lập thông tin thanh toán (Nếu bạn chưa có dự án, hãy tạo một dự án).
  • Khoảng một giờ

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ đọc qua Đọc và hoàn thành các bài tập

Bạn đánh giá trải nghiệm trước đây của mình với Google Cloud Platform như thế nào?

Chuyên gia Trung cấp Chuyên gia

Mục đích của hướng dẫn này là chạy hoàn toàn trên Google Cloud Platform. Không cần tải máy trạm của bạn xuống.

Bật API Cloud Talent Solutions

Hãy mở ứng dụng của bạn trong Cloud Console và nhấp vào trình đơn hamburger ở trên cùng bên trái. Hãy duyệt xem các trình đơn để tìm ra Giải pháp nhân tài –> Tổng quan.

Vì đây là một dự án mới, bạn sẽ được chuyển hướng đến một màn hình mới yêu cầu bạn bật API. Nhấp vào bật và đợi vài phút để bật API cho dự án này.

Bật tính năng Ghi nhật ký dữ liệu

Bây giờ, hãy quay lại trang tổng quan từ trước. Một hộp thoại mới sẽ xuất hiện yêu cầu bạn bật tính năng ghi dữ liệu (nếu không, hãy quay lại trang hộp thoại từ trước). Điều này thực sự chỉ để đảm bảo bạn biết rằng API Tìm kiếm việc làm được hỗ trợ bởi một mô hình máy học cần dữ liệu. Là một phần của quá trình tích hợp, bạn sẽ thực sự có thể gửi các sự kiện từ những người dùng đang tìm cách đào tạo thêm các mô hình đó. Khi quy trình này được triển khai thông qua mã, bạn có thể chỉ định thông tin nào sẽ được gửi qua.

Chúng ta sẽ tìm hiểu sâu hơn về những sự kiện đó và cách gửi những sự kiện đó sau, nhưng các mô hình đã qua đào tạo sẽ hoạt động hiệu quả. Hãy tiếp tục và bật tính năng ghi nhật ký dữ liệu, sau đó nhấp vào "dịch vụ kết nối tài khoản" trong bảng điều hướng bên trái của hộp thoại này.

Thiết lập tài khoản dịch vụ

Khi đưa ra yêu cầu API, bạn sẽ cần thực hiện các yêu cầu đó thay cho tài khoản đã được xác thực thực tế. Các phương pháp hay nhất của Google Cloud Platform khuyên bạn nên thiết lập tài khoản dịch vụ cho mục đích này. Hãy xem tài khoản dịch vụ là một cách dễ dàng để thiết lập những người dùng đã xác thực có quyền hạn chế. Điều này sẽ giúp bạn xây dựng một hệ thống độc lập và an toàn.

Ví dụ: chúng tôi cần một tài khoản dịch vụ để sử dụng API tìm kiếm việc làm. Hãy tạo một mã và cấp quyền đọc/ghi bằng "Job Editor" trong phần "Cloud Talent Solution" của phần điều hướng bên trái. Bạn cũng có thể thiết lập tài khoản dịch vụ chỉ với "Job Viewer" để tài khoản chỉ có quyền truy cập chỉ đọc.

Bước tiếp theo sẽ hỏi bạn có muốn cấp cho người dùng quyền truy cập vào tài khoản dịch vụ này không. Bạn có thể bỏ qua bước này, nhưng hãy nhớ nhấp vào "Create Key" ở dưới cùng. Chọn "JSON" cho loại khóa rồi chọn "Create". Một tệp thông tin xác thực JSON mới sẽ được tự động tải xuống. Lưu trữ tệp này trên máy chủ của bạn, mã bạn viết trong phần sau sẽ sử dụng tệp này để xác thực.

Đặt các biến môi trường

Để thuận tiện, chúng tôi sẽ sử dụng Google Cloud Shell. Nếu bạn muốn làm điều này từ môi trường phát triển của riêng mình, thì thật tuyệt vời! Đảm bảo bạn cài đặt Google Cloud SDKthư viện ứng dụng bằng ngôn ngữ bạn chọn (lớp học lập trình này sẽ sử dụng Python). Cloud Shell đã cài đặt các thư viện ứng dụng trên đám mây. Hữu ích phải không?

Để chạy mã bằng thư viện, bạn cần đảm bảo đã đặt hai biến môi trường: Một biến để chỉ định mã porinsert, một để chỉ định tệp khóa của tài khoản dịch vụ. Hãy đặt các tên đó.

Từ dự án của bạn, hãy nhấp vào biểu tượng ">_" ở trên cùng bên phải của bảng điều khiển web để mở màn hình đám mây. Thêm các biến môi trường sau để chỉ định mã dự án và đặt đường dẫn đến tệp khóa json của bạn:

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

Để xác minh rằng các biến đã được đặt, hãy dùng `echo`.

echo $GOOGLE_CLOUD_PROJECT
echo $GOOGLE_APPLICATION_CREDENTIALS

Mở trình soạn thảo mã trong Cloud Shell

Từ Google Cloud Console, hãy mở Cloud Shell bằng biểu tượng shell đám mây ở trên cùng bên phải.

Dọc theo phía trên cùng bên phải của vỏ đám mây sẽ là một loạt các biểu tượng. Nhấp vào File -> Launch Code Editor (như minh họa ở đây):

Tạo công ty

Sử dụng Tệp -> Tệp mới để tạo tệp nguồn mới và điền nội dung bên dưới vào tệp này. Gọi là 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

Mã này có chức năng gì? Hãy khám phá! Có hai lệnh gọi thư viện ứng dụng liên quan tại đây:

  • client_service = build('jobs', 'v3') tạo một đối tượng dịch vụ bằng thư viện ứng dụng python của API Google.
  • client_service.projects().companies().create(parent=project_id, body=request).execute() thực hiện lệnh gọi API để tạo công ty. Phản hồi cuộc gọi này là một đối tượng chứa thông tin công ty. Nội dung của cả đối tượng yêu cầu và đối tượng phản hồi được nêu trong tài liệu về phương thức tạo.

Chạy tệp từ thông báo nhắc (lệnh này sẽ hữu ích bên dưới cửa sổ trình chỉnh sửa mã) và bạn sẽ thấy nội dung tương tự như kết quả sau.

> 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 là giá trị nhận dạng duy nhất do API tìm kiếm việc làm tạo ra, trong khi external_id là giá trị nhận dạng bạn cung cấp từ hệ thống việc làm của riêng mình. Bất cứ khi nào bạn tham chiếu đến một đối tượng thông qua API, bạn sẽ cần sử dụng tên.

Cập nhật công ty

Nếu bạn đã có một pháp nhân công ty trong hệ thống và muốn thêm hoặc thay đổi một số trường, thì quy trình này sẽ chia thành các bước sau:

  • Tạo đối tượng bằng các giá trị hiện tại của trường cho công ty
  • Cập nhật đối tượng đó với các trường mới hoặc cập nhật, sử dụng trường công ty "name" làm khóa để API biết công ty nào cần cập nhật
  • Gửi đối tượng mới bằng phương thức "patch".

Xin lưu ý rằng quá trình này yêu cầu bạn phải có tất cả các giá trị hiện có, vì giá trị này ghi đè tất cả các giá trị của công ty cùng một lúc, bất kể bạn thực sự cập nhật những giá trị nào. Điều đó có nghĩa là trước khi cập nhật thông tin công ty, chúng tôi cần phải truy xuất thông tin đó.

Tạo một tệp mới, update_company.py trong không gian làm việc của bạn. Hãy bắt đầu nếu đã tắt bằng cách thêm phương thức get_company ở bên dưới.

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

Một điều bạn cần lưu ý tại thời điểm này là lệnh gọi API trông tương tự như việc tạo ra một công ty. Thư viện ứng dụng được tạo để khớp với giao diện REST, do đó, các hoạt động CRUD mà bạn đang thực hiện trên các công ty đều có dạng client_service.projects().companies().theMethod(argName=argValue).execute().

Bây giờ, chúng ta đã có tập hợp các giá trị hiện có, tạo một "patch" đối tượng với các tên trường mà bạn muốn cập nhật và các giá trị mới và sử dụng đối tượng đó để cập nhật đối tượng công ty của bạn với các giá trị mới. Đây là những điều thú vị khi làm việc này bằng Python – Thư viện máy khách đại diện cho công ty dưới dạng đối tượng từ điển, tức là phương thức này đã được tích hợp sẵn. Không cần lặp lại nhiều! Tạo một đối tượng từ điển ngay bên dưới mã bạn đã viết.

update_company.py

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

Bây giờ, điều duy nhất bạn cần làm là tạo đối tượng yêu cầu (xem Tài liệu về trang để biết chi tiết về những nội dung có thể đưa vào đó) và thực thi lệnh gọi API.

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

Ngoài ra, nếu chỉ muốn cung cấp các trường mà bạn thực sự muốn thay đổi, bạn có thể thêm các trường đó cùng với mặt nạ cập nhật. Điều này hữu ích trong các tình huống mà bạn chưa cập nhật cài đặt đối tượng công ty hoặc chỉ có một trường mà bạn muốn cập nhật và không muốn gửi các đối tượng lớn không cần thiết qua lại. Nhưng làm cách nào để bạn SỬ DỤNG mặt nạ cập nhật, bạn sẽ hỏi? Mã để thể hiện cách thú vị và mới mẻ này nhằm cập nhật thông tin về công ty ở đâu?

Bạn là người đọc thư biết cho chúng tôi! Đoạn mã dưới đây thực thi cập nhật thông tin công ty bằng cách sử dụng mặt nạ cập nhật thay vì việc thay thế toàn bộ mục nhập.

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

Lưu ý rằng lệnh gọi API giống nhau. Sự khác biệt là đối tượng yêu cầu hiện có hai trường (công tyupdate_mask), thay vì chỉ một trường (công ty). Mặt nạ cập nhật là danh sách trường được phân tách bằng dấu phẩy. Nếu chúng ta muốn đưa trường "websiteURI" vào mặt nạ, thì giá trị mặt nạ sẽ trông giống như sau:

   mask = 'displayName,websiteUri'

Dù bạn chọn tuyến đường nào, hãy chạy tuyến đường đó từ giao diện đám mây và (giả sử bạn đã để lại các câu lệnh in đó), bạn sẽ thấy đầu ra cho biết cả giá trị cũ và giá trị mới cho công ty của bạn.

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

Sẽ không có nhiều điểm cho một giải pháp tìm việc mà không có việc làm để tìm kiếm! Trong phần cuối cùng, chúng ta đã nói về việc tạo công ty. Bây giờ, hãy nói về cách tạo công việc và các phương pháp hay nhất để làm việc với họ.

Lưu ý rằng công việc sẽ được đính kèm vào các công ty. Nếu bạn chưa tạo bất kỳ công ty nào bằng API (hoặc nếu bạn đã chạy thành công "delete" gọi ở cuối phần và đã xóa công ty duy nhất của mình) hãy quay lại và tạo lại công ty. Sau đó, bạn sẽ sẵn sàng tạo việc làm!

Tạo công việc

Hãy bắt đầu bằng cách tạo một công việc!

Để tạo công việc, bạn cần có những dữ liệu sau:

  • Tên của công ty. Con người không thể đọc được "công ty ưa thích của tôi LLC" chuỗi, nhưng chuỗi đó dài hơn "projects/[PROJECT_ID]/companies/COMPANY_ID"
  • Mã yêu cầu cho công việc. Mã này tương tự với external_id của một công ty – đại diện cho giá trị nhận dạng duy nhất của riêng bạn cho công việc, để giúp duy trì API Giải pháp nhân tài trên đám mây dễ dàng đồng bộ với giải pháp công việc hiện tại của bạn, ví dụ: adult_llama_wrangler
  • Chức danh công việc, đó là tên hiển thị của công việc, ví dụ: " Cấp độ Llama Wrangler."
  • Mô tả công việc. Lưu ý rằng đoạn mô tả có thể chứa HTML được nhúng để bạn định dạng đúng. Nội dung khá rõ ràng. "<p>Will sẽ dẫn dắt nhóm llama hur nhiềurs.</p><p> Phải có khả năng lãnh đạo và kinh nghiệm với llamas."</p&gt);
  • applicationInfo – Thông tin thêm về cách đăng ký. Có thể là 1+ uris, 1+ địa chỉ email hoặc 1 chuỗi được định dạng HTML có hướng dẫn thêm. Bạn thậm chí có thể bao gồm cả 3! Tuy nhiên, bạn cần cung cấp ít nhất 1 URL.

Nếu chúng ta tạo công việc cho công ty FooCorp đã được tạo ra trước đây, thì các trường đó có thể trông như sau:

name

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

requisition_id

adult_llama_wrangler

title [tiêu_đề]

Cao cấp Llama Wrangler

description [mô_tả]

Cần có kinh nghiệm Llama Wrangler để làm việc toàn thời gian. Bạn cần có khả năng lãnh đạo, vì bạn sẽ dẫn dắt một nhóm nhân viên chăm sóc lạc đà không ngừng hoạt động và huấn luyện chúng tới những nhân vật có khả năng hoạt động ở quy mô lớn. Nhanh như thật. Đây là một số lạc đà không bướu nhanh.

application_info

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

Email: llama-application@example.com

Nếu bạn không có tên công ty nữa, bạn có thể sử dụng "get_company" mã mà bạn đã sử dụng trong bước 3 để truy xuất tên công ty.

Mã để tạo công việc sẽ trông rất giống với mã để tạo công ty. Một vài dòng đầu tiên sẽ khá quen thuộc với bạn (nhập blah blah, tạo đối tượng dịch vụ ứng dụng). Sau đó, bạn tạo một đối tượng dict (chỉ là một tập hợp các cặp khóa/giá trị lồng nhau) đại diện cho yêu cầu của bạn và gửi đối tượng đó cùng với lệnh gọi API "create".

Dán đoạn mã sau vào tệp Create_job.py. Bạn có thể gọi tên đó theo bất kỳ cách nào bạn muốn, nhưng hướng dẫn này sẽ giả định tên tệp đó.

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

Chạy phần mềm đó từ Cloud Shell và bạn sẽ nhận lại một khối JSON lớn với công việc bạn vừa tạo.

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

Nếu khôi phục được những nội dung như trên, bạn đã tạo thành công một công việc!

Việc làm phải là duy nhất

Hãy thử nghiệm, chạy lại tập lệnh cuối cùng đó và xem điều gì sẽ xảy ra.

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

Điều gì đã xảy ra ở đây? Bạn đã cố nhập một tin tuyển dụng trùng lặp. Các công việc chưa hết hạn phải là giá trị duy nhất trong hệ thống.

Tính duy nhất được xác định bởi các trường sau:

  • Tên công ty – Bắt buộc khi bạn tạo công việc, không thể cập nhật
  • Mã yêu cầu – Bắt buộc khi bạn tạo công việc, không thể cập nhật
  • Mã ngôn ngữ – Không bắt buộc, mặc định là en_us, có thể cập nhật

Nếu một công việc bất kỳ mà bạn cố gắng tạo hoặc cập nhật có tất cả 3 trường chung này với một công việc hiện có, chưa hết hạn, thì công việc đó bị coi là trùng lặp, và việc tạo/cập nhật không thành công, kèm theo thông báo lỗi mà bạn thấy ở trên.

Thật tuyệt!

Xin chúc mừng! Giờ đây, bạn có cả một công ty VÀ tin tuyển dụng cho công ty đó trong hệ thống của bạn! Bạn đã hoàn thành tất cả những việc này trong vòng chưa đầy một giờ! Bạn có biết khoảng thời gian để các trang web tuyển dụng việc làm trên Internet đạt được điểm này là bao lâu không? Hơn một giờ. Ví dụ như cách khác. Tuần. Tháng. Lên máy bay. Có thể đã có bảng tính và tuyên bố sứ mệnh liên quan. Tôi chắc chắn rằng ở văn phòng đó khá giống nhau. Bạn có biết điều đó không? Hơn một giờ. Bạn làm tốt lắm!

Mặc dù vậy, vẫn còn nhiều nội dung khác! Hãy tiếp tục.

Cập nhật việc làm

Cũng giống như với các công ty, chúng tôi có thể nhận công việc để xem thông tin chi tiết và vẽ công việc để cập nhật công việc.

Đây là cách bạn sẽ nhận được chi tiết công việc. Nếu đoạn mã dưới đây có vẻ quen thuộc, thì đó là do chúng tôi đã lấy phương thức "get_company" từ phần trước và thay thế "company" bằng "job" và được thêm vào biến Job_name. Trước tiên, hãy xem thông tin về công việc.

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)

Để thực sự cập nhật công việc, bạn phải có các tuỳ chọn tương tự như trước đây khi cập nhật công ty: gửi một đối tượng hoàn chỉnh có giá trị cập nhật để thay thế đối tượng cũ hoặc gửi một bản vá nhỏ hơn với mặt nạ trường được phân tách bằng dấu phẩy.

update_job.py (cập nhật với việc thay thế toàn bộ đối tượng)

   # 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 (chỉ với các giá trị mới của trường và mặt nạ cập nhật)

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

Hai đoạn trích ở trên thực hiện cùng một việc: Họ cập nhật danh sách việc làm cụ thể bằng chức danh & việc Cũng lưu ý rằng dòng thực hiện lệnh gọi API đều giống nhau: Sự khác biệt duy nhất là ở đối tượng yêu cầu. Một công cụ có đối tượng công việc đầy đủ sẽ thay thế công việc bằng tên công việc đó. Trường còn lại chỉ là một nhóm các trường cần cập nhật.

Dù bạn chọn cách chạy nào, kết quả cũng giống nhau. Hãy thử xem sao!

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

Thật tuyệt vời! Bạn đã hoàn tất bước 4!

Bây giờ, hãy nhìn lại bạn. Ném tất cả những điều này giống như một con quái vật năng suất. Cho đến nay, bạn có thể tạo công ty, tạo việc làm và cập nhật cả hai chỉ trong nháy mắt! Nhưng bạn có thể nhận thấy điều gì đó lạ lẫm trong các bài học này. Thao tác cuối cùng đó sẽ đặt D trong C.R.U.D. Nếu chúng ta muốn XÓA thì hãy làm gì? Đừng ngại đọc gì cả! Phần tiếp theo trình bày chi tiết về điều này.

Hãy bắt đầu với các công ty, vì những lý do sẽ khiến các câu chuyện trở nên hợp lý sau khoảng 5 phút kể từ bây giờ.

Xóa công ty

Việc xóa một công ty là khá dễ dàng. Bạn cũng có thể sử dụng cùng một bảng kê khai nhập khi tạo hoặc cập nhật công ty, chỉ cần gọi phương thức xóa, chỉ chuyển tên công ty (không cần nội dung yêu cầu).

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

Để giúp dọn dẹp trong khi bạn khám phá API này, đây là một tập lệnh python đơn giản lấy tên công ty làm thông số dòng lệnh và bạn có thể đoán rằng công ty đó sẽ xóa công ty này.

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

Gọi nó, chuyển tên công ty làm đối số dòng lệnh duy nhất.

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

Bạn đã hoàn thành rồi! Bạn thành công – đợi trong giây lát. Đó là gì vậy? Đã xảy ra lỗi? "Bạn vẫn đang mở công việc"?

Có! Bây giờ bạn đã biết quy tắc đầu tiên của việc xóa công ty: Quy tắc này sẽ không thành công miễn là công ty đó vẫn đang mở việc làm. Chúng tôi giải quyết vấn đề đó như thế nào? Chúng tôi phải thực hiện và xóa tất cả các công việc đang mở liên kết với công ty đó.

Bây giờ, điều hoàn toàn hợp lý mà bạn đang nghĩ là: "i\u93; sẽ xóa công việc tôi vừa tạo và THÌ hãy xóa công ty mà nó đã đi kèm!&quot! Như vậy thật hợp lý! Hãy làm điều đó.

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

Bây giờ, hãy thử chạy lại. Các giá trị được trả về từ các lệnh gọi API đó phải là các mục nhập "company" và "job" hiện tại, phải là các mục nhập trống.

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

Ah. Bạn thật là xuất sắc!

Điều cuối cùng tôi muốn làm là. Giải pháp ở trên hoạt động hiệu quả vì bạn, người đọc,

  • Đã có tên công việc cho tất cả các công việc hiện có cho công ty này.
  • Đã tạo quá nhiều việc cần làm cho công ty đó theo cách thủ công.

Hãy giả sử đó không phải là trường hợp

Có một lệnh gọi API, jobs.list(), sẽ trả về các công việc khớp với mã dự án đã chỉ định và công ty mẹ. Đây là cách bạn gọi phương thức này:

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

Giờ đây, bạn có thể tạo và quản lý trang thông tin việc làm và công ty bằng API Tìm kiếm việc làm trên Google Cloud Talent Solutions!

Những điều chúng tôi đã đề cập

  • Tạo và quản lý công ty
  • Tạo và quản lý danh sách việc làm cho các công ty đó
  • Thiết lập tài khoản dịch vụ để thay mặt bạn tương tác với API

Tìm hiểu thêm