ใน Codelab นี้ คุณจะได้เรียนรู้วิธีเพิ่มประสิทธิภาพการค้นหางานและการหาบุคลากรให้องค์กรโดยใช้ Cloud Talent Solution API (CTS) เมื่อใช้ CTS คุณจะเพิ่มศักยภาพของแมชชีนเลิร์นนิงไปยังประสบการณ์การค้นหางานได้
สิ่งที่จะได้เรียนรู้
- เปิดใช้ CTS ในโปรเจ็กต์ Google Cloud
- สร้าง "Company" บุคคลและงานในบริษัทเหล่านั้น
สิ่งที่ต้องมี
- โครงการ Google Cloud ที่มีการเรียกเก็บเงินได้รับการตั้งค่าแล้ว (หากยังไม่มี ให้สร้าง
- ประมาณ 1 ชั่วโมง
คุณจะใช้บทแนะนํานี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Google Cloud Platform ที่ผ่านมาอย่างไร
บทแนะนํานี้มีจุดประสงค์ให้ทํางานอย่างเต็มรูปแบบบน Google Cloud Platform ไม่จําเป็นต้องดาวน์โหลดไปยังเวิร์กสเตชัน
- หากคุณยังไม่มีบัญชี Google ให้สร้างบัญชีแล้วลงชื่อเข้าใช้
- สร้างโปรเจ็กต์ GCP ใหม่และเปิดใช้การเรียกเก็บเงิน การสิ้นสุด Codelab จะดีภายใต้ข้อความค้นหาฟรีที่คุณได้รับต่อเดือน
เปิดใช้ Cloud Talent Solutions API
เปิดแอปพลิเคชันใน Cloud Console แล้วคลิกเมนูแฮมเบอร์เกอร์ที่ด้านบนซ้าย เรียกดูเมนูในโซลูชันสําหรับครีเอเตอร์ -> ภาพรวม
เนื่องจากนี่เป็นโปรเจ็กต์ใหม่ ระบบจะเปลี่ยนเส้นทางคุณไปยังหน้าจอใหม่ที่ขอให้คุณเปิดใช้ API คลิกเปิดใช้และรอสักครู่เพื่อเปิด API สําหรับโปรเจ็กต์นี้
เปิดใช้การบันทึกข้อมูล
ทีนี้กลับไปที่หน้าภาพรวมอีกครั้ง กล่องโต้ตอบใหม่จะปรากฏขึ้นเพื่อขอให้คุณเปิดใช้การบันทึกข้อมูล (หากไม่เป็นเช่นนั้น ให้กลับไปที่หน้ากล่องโต้ตอบก่อนหน้านี้) เพียงแต่ต้องตรวจสอบว่า Job Search API ขับเคลื่อนโดยโมเดลแมชชีนเลิร์นนิงที่ต้องการข้อมูล โดยในการผสานรวมนี้ คุณจะสามารถส่งเหตุการณ์จากผู้ใช้ที่กําลังค้นหาการฝึกโมเดลเพิ่มเติมเพิ่มเติมได้ เมื่อติดตั้งใช้งานนี้ผ่านทางโค้ด คุณจะระบุได้ว่าข้อมูลที่จะส่งไปให้คืออะไร
เราจะเจาะลึกรายละเอียดเกี่ยวกับเหตุการณ์เหล่านั้นและวิธีส่งเหตุการณ์ในภายหลัง แต่รูปแบบก่อนการฝึกจะทํางานได้ดี เปิดใช้การบันทึกข้อมูลก่อน แล้วคลิก ""การเชื่อมต่อบัญชีบริการ" ในการนําทางด้านซ้ายของกล่องโต้ตอบนี้
สร้างบัญชีบริการ
เมื่อส่งคําขอ API คุณจะต้องส่งคําขอในนามของบัญชีที่ได้รับการตรวจสอบสิทธิ์จริง แนวทางปฏิบัติแนะนําสําหรับ Google Cloud Platform' แนะนําให้ตั้งค่าบัญชีบริการ ลองคิดว่าบัญชีบริการเป็นวิธีง่ายๆ ในการตั้งค่าผู้ใช้ที่ตรวจสอบสิทธิ์แล้วซึ่งมีสิทธิ์แบบจํากัด ซึ่งจะช่วยคุณสร้างระบบอิสระและปลอดภัย
เช่น เราอาจต้องใช้บัญชีบริการเพื่อใช้ Job Search API มาสร้างหลักเกณฑ์และมอบสิทธิ์การอ่าน/เขียนโดยใช้ส่วน "Job Editor" จากส่วน "Cloud Talent Solution" ของการนําทางด้านซ้ายกัน นอกจากนี้ ยังตั้งค่าบัญชีบริการด้วย "Job Viewer" ได้ด้วย เพื่อให้มีสิทธิ์เข้าถึงระดับอ่านอย่างเดียว
ขั้นตอนต่อไปจะถามคุณว่าต้องการให้สิทธิ์ผู้ใช้เข้าถึงบัญชีบริการนี้หรือไม่ คุณข้ามขั้นตอนนี้ได้ แต่อย่าลืมคลิก "Create Key" บริเวณด้านล่าง เลือก "JSON" สําหรับประเภทคีย์ แล้วเลือก "Create" ระบบจะดาวน์โหลดไฟล์ข้อมูลเข้าสู่ระบบ JSON ใหม่โดยอัตโนมัติ เก็บไฟล์นี้บนเซิร์ฟเวอร์ของคุณ โค้ดที่คุณเขียนในส่วนถัดไปจะใช้เพื่อตรวจสอบสิทธิ์
ตั้งค่าตัวแปรสภาพแวดล้อม
เพื่อความสะดวก เราจะใช้ Shell ของ Google Cloud หากคุณอยากทําสิ่งนี้จากสภาพแวดล้อมการพัฒนาของคุณเอง เยี่ยมไปเลย ตรวจสอบว่าได้ติดตั้ง Google Cloud SDK และไลบรารีของไคลเอ็นต์เป็นภาษาที่ต้องการแล้ว (Codelab นี้จะใช้ Python) Cloud Shell จะมีไลบรารีของไคลเอ็นต์ระบบคลาวด์ติดตั้งอยู่แล้ว มีประโยชน์ใช่ไหม
หากต้องการเรียกใช้โค้ดโดยใช้ไลบรารี คุณต้องตรวจสอบว่าได้ตั้งค่าตัวแปรสภาพแวดล้อม 2 รายการแล้ว ตัวแปรหนึ่งเพื่อระบุรหัส Porject และอีกรายการเพื่อระบุไฟล์คีย์ของบัญชีบริการ มาเริ่มกันเลย
จากโปรเจ็กต์ ให้คลิกไอคอน ">_" ที่ด้านขวาบนของคอนโซลเว็บเพื่อเปิด Cloud Shell เพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้เพื่อระบุรหัสโปรเจ็กต์และกําหนดเส้นทางไปยังไฟล์คีย์ 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 Console ให้เปิด Cloud Shell โดยใช้ไอคอน Cloud Shell ที่ด้านบนขวา
ที่ด้านขวาบนของ Cloud Shell จะเป็นชุดไอคอน คลิก File -> Launch 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
รหัสนี้ทําอะไร ไปสํารวจกันเลย! การเรียกไลบรารีของไคลเอ็นต์ที่เกี่ยวข้องมี 2 แบบดังนี้
client_service = build('jobs', 'v3')
สร้างออบเจ็กต์บริการโดยใช้ไลบรารีของไคลเอ็นต์ Google API Pythonclient_service.projects().companies().create(parent=project_id, body=request).execute()
จะเรียกใช้ API เพื่อสร้างบริษัท การตอบสนองต่อการเรียกนี้เป็นออบเจ็กต์ที่มีข้อมูลบริษัท เนื้อหาของทั้งออบเจ็กต์คําขอและออบเจ็กต์การตอบกลับจะอยู่ในเอกสารประกอบสําหรับวิธีการสร้าง
เรียกใช้ไฟล์จาก Command Prompt (ซึ่งมีประโยชน์ใต้หน้าต่างของตัวแก้ไขโค้ด) และคุณจะเห็นสิ่งที่คล้ายกับเอาต์พุตต่อไปนี้
> 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 คือตัวระบุที่ไม่ซ้ํากันซึ่งสร้างขึ้นโดย 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 จะเหมือนกัน สิ่งที่แตกต่างกันคือออบเจ็กต์คําขอมี 2 ช่อง (บริษัท และ update_mask) ไม่ใช่เพียงช่องเดียว (company) เน็ตเวิร์กมาสก์คือรายการที่คั่นด้วยคอมมา หากต้องการรวมช่อง "websiteUri" ในมาสก์ ค่าของมาสก์จะมีลักษณะดังนี้
mask = 'displayName,websiteUri'
ไม่ว่าคุณจะเลือกเส้นทางใด ให้เรียกใช้จาก Shell ในระบบคลาวด์และ (สมมติว่าคุณปล่อยคําสั่งที่พิมพ์ไว้เหล่านั้น) คุณควรจะเห็นเอาต์พุตที่ระบุทั้งค่าเก่าและค่าใหม่ของบริษัท
$ 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 แฟนตาซีของฉัน แต่สตริงที่ยาวกว่าและละเอียดกว่าโปรเจ็กต์/[PROJECT_ID]/บริษัท/รหัสบริษัท/บริษัท)
- รหัสคําขอของงาน ซึ่งคล้ายกับ external_id ของบริษัท ซึ่งจะแสดงถึงตัวระบุที่ไม่ซ้ํากันของคุณเองสําหรับงาน เพื่อให้ Cloud Talent Solution API ซิงค์กับโซลูชันงานปัจจุบันได้ง่ายขึ้น เช่น senior_llama_wrangler
- ชื่อของงาน ซึ่งเป็นชื่อที่แสดงของงาน เช่น "Senior Llama Wrangler."
- คําอธิบายของงาน โปรดทราบว่าคําอธิบายอาจมี HTML ที่ฝังไว้เพื่อให้จัดรูปแบบได้อย่างถูกต้อง เนื้อหาค่อนข้างอธิบายได้ด้วยตัวเอง "<p>จะนําทีมของ llama wranglers.</p><p> ต้องมีความสามารถในการเป็นผู้นําและประสบการณ์ของ llamas."</p>
- applicationInfo - ข้อมูลเพิ่มเติมเกี่ยวกับวิธีสมัคร ต้องมี URI อย่างน้อย 1 รายการ อีเมลมากกว่า 1 รายการ หรือสตริงรูปแบบ HTML พร้อมวิธีการเพิ่มเติม คุณจะใส่ทั้ง 3 อย่างก็ได้ แต่คุณต้องใส่อย่างน้อย 1 ภาพ
ดังนั้น หากเราสร้างงานให้บริษัท FooCorp ที่เราเคยสร้างไว้ก่อนหน้านี้ ช่องจะมีลักษณะดังนี้
name |
|
รหัสสอบถามเกี่ยวกับผลิตภัณฑ์ | ninior_llama_wrangler |
ชื่อ [title] | ลามะ Wrangler อาวุโส |
รายละเอียด [description] | ต้องใช้ Llama Wrangler ที่มีประสบการณ์เพื่อรับตําแหน่งเต็มเวลา ผู้นําต้องมีความสามารถ เนื่องจากคุณจะต้องนําทีมผู้ดูแลลามะมาฝึกและสอนจนได้ Wrangler แบบเต็มตัว <p/> ต้องทํางานได้ดีกับสัตว์และเตรียมตัวสําหรับการวิ่ง เช่น รวดเร็วจริงๆ เช่น เร็วมาก ลามะลาเร็วๆ นี้ |
ข้อมูลแอปพลิเคชัน | Uris: http://www.example.com/llama_wrangler_application/ อีเมล: llama-apply@example.com |
หากไม่มีชื่อบริษัทอีกต่อไป คุณใช้รหัส "get_company" ที่ใช้ในขั้นตอนที่ 3 เพื่อเรียกข้อมูลได้
โค้ดสําหรับการสร้างงานจะมีลักษณะคล้ายกับโค้ดสําหรับการสร้างบริษัท หลายบรรทัดแรกน่าจะคุ้นเคยอยู่แล้ว (นําเข้า blah blah blah, Instantiate user service object) จากนั้นจึงสร้างออบเจ็กต์คําสั่ง (เฉพาะชุดคีย์-ค่าที่ซ้อนกัน) ที่แสดงถึงคําขอของคุณ และส่งไปพร้อมกับการเรียกใช้ "create" 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
เรียกใช้ Shell จาก Cloud Shell เพื่อรับ 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 ช่องนี้เหมือนกับงานที่มีอยู่และยังไม่หมดอายุ งานนั้นจะถือว่าซ้ํากันและจะสร้าง/อัปเดตไม่สําเร็จพร้อมข้อความแสดงข้อผิดพลาดที่คุณเห็นด้านบน
ไชโย
ขอแสดงความยินดี ขณะนี้คุณมีทั้งบริษัทและรายการงานสําหรับบริษัทในระบบของคุณ ทั้งหมดนี้ใช้เวลาไม่ถึง 1 ชั่วโมง คุณอยากรู้ไหมว่าต้องใช้เวลานานเท่าใดกว่าเว็บไซต์ประกาศรับสมัครงานที่ดีที่สุดบนอินเทอร์เน็ตจะไปถึงผู้อ่าน ใช้เวลามากกว่า 1 ชั่วโมง ชอบทางมากขึ้น สัปดาห์ เดือน การประชุมคณะกรรมการ เพราะอาจมีสเปรดชีตและคําแถลงเกี่ยวกับพันธกิจ ฉันรู้จริงๆ ว่าในสํานักงานนั้นน่าจะค่อนข้างเล็ก รู้ไหมว่าเอาอะไรไปบ้าง ไม่ถึง 1 ชั่วโมง สุดๆ ไปเลย
ยิ่งไปกว่านั้นแล้ว มาลุยกันต่อ
การอัปเดตงาน
เช่นเดียวกับบริษัทอื่นๆ เราจะรับงานเพื่อดูรายละเอียด และแพตช์งานเพื่ออัปเดตได้
วิธีที่คุณต้องการรายละเอียดงานมีดังนี้ หากข้อมูลโค้ดด้านล่างนี้ดูคุ้นเคย นั่นเป็นเพราะเราใช้เมธอด "get_company" จากส่วนก่อนหน้าและแทนที่ "company" ด้วย "job" และเพิ่มในตัวแปร Jobs_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)
ข้อมูลโค้ด 2 รายการข้างต้นมีการทํางานเหมือนกัน นั่นคือ อัปเดตตําแหน่งงานที่เฉพาะเจาะจงด้วยตําแหน่งงาน "Rogue Llama Acquisition Engine" โปรดทราบด้วยว่าบรรทัดที่เรียกใช้ 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 นาทีนับจากนี้
ลบบริษัท
การลบบริษัทนั้นง่ายนิดเดียว เมื่อคุณใช้คําสั่งนําเข้าเดียวกันกับที่คุณใช้สร้างหรืออัปเดตบริษัท ให้เรียกเมธอด delete โดยส่งเฉพาะชื่อบริษัท (ไม่ต้องร้องขอเนื้อหา)
# 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 นี้ นี่คือสคริปต์ Python ที่เรียบง่ายซึ่งใช้ชื่อบริษัทเป็นพารามิเตอร์บรรทัดคําสั่ง และคิดว่าจะลบบริษัทไปแล้ว
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==">
เพียงเท่านี้ก็เรียบร้อยแล้ว เรียบร้อยแล้ว รอสักครู่ สิ่งนั้นคืออะไร ข้อผิดพลาด "ยังมีงานว่างอยู่ไหม"?
แน่นอน คุณทราบกฎแรกสําหรับการลบบริษัทแล้ว ก็จะไม่สําเร็จตราบใดที่บริษัทนั้นยังมีตําแหน่งงานว่างอยู่ เราจะจัดการกับเรื่องนี้อย่างไร เราต้องลบและลบงานที่เปิดอยู่ทั้งหมดที่เกี่ยวข้องกับบริษัทนั้น
ทีนี้เหตุผลที่สมเหตุสมผลก็ให้คิดว่า "I'จะลบงานที่เพิ่งสร้างไป แล้วลบบริษัทนั้นออก ผู้อ่านเข้าใจแล้ว มาเริ่มกันเลย
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 เหล่านี้ควรเป็นค่า "company" และ "job" ปัจจุบันที่ควรเป็นค่าว่าง
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 ในนามของคุณ
ดูข้อมูลเพิ่มเติม
- ดูซีรีส์ช่องของนักพัฒนาซอฟต์แวร์ใน Cloud Talent Solutions
- ดูโปรเจ็กต์ GitHub
- เรียกดูเอกสารประกอบเกี่ยวกับ API
- โพสต์คําถามและค้นหาคําตอบใน Stackflow ที่ติดแท็กด้วย google-cloud-talent-solution