واجهة برمجة تطبيقات وظائف البحث باستخدام Google Cloud

في هذا الدرس التطبيقي، ستتعرّف على كيفية تحسين البحث عن الوظائف واكتساب المواهب لمؤسستك باستخدام Cloud Talent Solution API (CTS). باستخدام مجموعة أدوات اختبار التوافق (CTS)، يمكنك الاستفادة من تكنولوجيا تعلُّم الآلة في تجربة البحث عن الوظائف.

ما ستتعرّف عليه

  • تفعيل CTS في مشروعك على Google Cloud
  • إنشاء &اقتباسات؛ كيانات&وظائف في هذه الشركات

المتطلبات اللازمة

  • أن يكون قد سبق لك إعداد مشروع على Google Cloud يتضمّن الفوترة (إذا لم يكن لديك مشروع حاليًا، عليك إنشاء مشروع).
  • حوالي ساعة

كيف ستستخدم هذا البرنامج التعليمي؟

قراءة القراءة فقط قراءة القراءة وإكمال التدريبات

كيف تقيّم تجربتك السابقة مع Google Cloud Platform؟

مبتدئ متوسط خبير

يهدف هذا البرنامج التعليمي إلى التشغيل بشكل كامل على Google Cloud Platform. ليس من الضروري إجراء أي عمليات تنزيل في محطة العمل.

تفعيل واجهة برمجة تطبيقات حلول المواهب في السحابة الإلكترونية

افتح التطبيق في Cloud Console وانقر على قائمة الهمبورغر في أعلى اليمين. تصفَّح القوائم للوصول إلى حلّ المواهب -> نظرة عامة.

ولأنّ هذا المشروع جديد، سيُعاد توجيهك إلى شاشة جديدة تطلب منك تفعيل واجهة برمجة التطبيقات. انقر على "تفعيل" وانتظر بضع دقائق حتى يتم تفعيل واجهة برمجة التطبيقات لهذا المشروع.

تفعيل تسجيل البيانات

والآن ارجع إلى صفحة النظرة العامة من قبل. سيظهر مربع حوار جديد يطلب منك تفعيل تسجيل البيانات (إذا لم يحدث ذلك، يُرجى الرجوع إلى صفحة مربّع الحوار من قبل). هذا فقط للتأكد من أنك تعرف أن Job Search API مدعومة من نموذج تعلُّم الآلة الذي يحتاج إلى البيانات. كجزء من عملية الدمج، ستتمكّن فعليًا من إرسال الأحداث من المستخدمين الذين يبحثون عن المزيد من التدريب على هذه النماذج. وعند تنفيذ ذلك من خلال الرمز، يمكنك تحديد المعلومات التي يتم إرسالها.

سنتعمّق أكثر في هذه الأحداث وكيفية إرسالها لاحقًا، ولكن النماذج المدرّبة مسبقًا ستعمل بشكل جيد. تابِع تفعيل تسجيل البيانات، ثم انقر على "اتصالات حساب الخدمة&&quot؛ في شريط التنقّل الأيمن من مربّع الحوار هذا.

إعداد حساب خدمة

عند إجراء طلبات بيانات من واجهة برمجة التطبيقات، سيكون عليك تنفيذها نيابةً عن حساب فعلي تمت مصادقته. وتنصح أفضل ممارسات Google Cloud Platform بإعداد حساب خدمة لذلك. يمكنك اعتبار حسابات الخدمة طريقة سهلة لإعداد المستخدمين الذين تمت مصادقتهم والذين لديهم أذونات محدودة. سيساعدك هذا الأمر في إنشاء نظام مستقل وآمن.

على سبيل المثال، سنحتاج إلى حساب خدمة لاستخدام واجهة برمجة تطبيقات بحث الوظائف. لننشئ واحدًا ونمنحه أذونات بالقراءة/الكتابة باستخدام &quot؛محرّر الوظائف&quot؛ ضمن قسم "Cloud Talent Solution" في شريط التنقل الأيمن. يمكن أيضًا إعداد حساب خدمة باستخدام "مُشاهد وظيفة" فقط؛ لذلك لن يكون لديه سوى حق الوصول للقراءة فقط.

في الخطوة التالية، ستتم مطالبتك بما إذا كنت تريد منح المستخدمين حق الوصول إلى حساب الخدمة هذا. يمكنك تخطي هذه الخطوة، ولكن تأكد من النقر على &إنشاء مفتاح&& قريب بالقرب من الجزء السفلي. اختَر "JSON" لنوع المفتاح ثم "إنشاء". يتم تنزيل ملف بيانات اعتماد JSON جديد تلقائيًا. يُرجى حفظ هذا الملف على الخادم، فإن الرمز الذي تكتبه في قسم لاحق سيستخدمه للمصادقة.

ضبط متغيرات البيئة

لتيسير الأمر، سنستخدم Google Cloud Shell. رائع، إذا كنت تريد إجراء ذلك من بيئة التطوير الخاصة بك، فإنه أمر رائع! تأكّد من تثبيت Google Cloud SDK ومكتبات العميل باللغة التي تختارها (سيستخدم هذا الدرس التطبيقي Python). سبق تثبيت مكتبات السحابة الإلكترونية في Cloud Shell. رائع، أليس كذلك؟

لتنفيذ الرمز باستخدام المكتبات، يجب التأكّد من ضبط متغيّرَين للبيئة: أحدهما لتحديد رقم تعريف الpor، والآخر لتحديد ملف حساب الخدمة الخاص بك. لنبدأ إعداد هذه التطبيقات.

من مشروعك، انقر على الرمز &quot؛>_" في أعلى يسار وحدة تحكم الويب لفتح وحدة تحكّم سحابية. يمكنك إضافة متغيّرات البيئة التالية لتحديد رقم تعريف المشروع وتحديد مسار إلى ملف مفتاح 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 -> New File (ملف جديد و&gt) لإنشاء ملف مصدر جديد واملأه بالمحتوى أدناه. وعليك تسميته 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 python.
  • ينفِّذ client_service.projects().companies().create(parent=project_id, body=request).execute() طلب البيانات من واجهة برمجة التطبيقات لإنشاء الشركة. الاستجابة لهذا الاتصال هي عبارة عن كائن يحتوي على معلومات الشركة. تم توضيح محتوى كل من كائن الطلب وكائن الرد في وثائق طريقة الإنشاء.

شغِّل الملف من موجه الأوامر (الذي يكون مفيدًا بشكلٍ مباشر أسفل نافذة أداة تعديل الرموز)، وستظهر لك نتائج مشابهة لما يلي.

> 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 

الاسم هو المعرّف الفريد الذي يتم إنشاؤه بواسطة واجهة برمجة تطبيقات البحث عن وظائف، في حين أن external_id هو المعرّف الذي تقدمه من نظام الوظائف الخاص بك. في أي وقت تشير فيه إلى كائن من خلال واجهة برمجة التطبيقات، ستحتاج إلى استخدام الاسم.

تحديث الشركة

إذا كان لديك كيان شركة في النظام وأردت إضافة بعض الحقول أو تغييرها، يتم تقسيم العملية إلى الخطوات التالية:

  • إنشاء كائن باستخدام قيم الحقول الحالية للشركة
  • عدِّل هذا العنصر باستخدام الحقول الجديدة أو المعدَّلة، باستخدام الحقل "name" كمفتاح حتى تعرف واجهة برمجة التطبيقات الشركة التي يجب تحديثها.
  • أرسِل العنصر الجديد باستخدام "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()

إحدى النقاط التي يجب مراعاتها عند هذه النقطة هي أن طلب البيانات من واجهة برمجة التطبيقات يبدو مشابهًا بشكلٍ مذهل لإنشاء شركة. تم إنشاء مكتبة العملاء لتتناسب مع واجهة REST، وبالتالي فإن عمليات CRUD التي تجريها في الشركات ستكون كلها على النموذج client_service.projects().companies().theMethod(argName=argValue).execute()..

الآن وبعد أن تم ضبطنا على مجموعة القيم الحالية، يمكنك إنشاء كائن "patch" باستخدام أسماء الحقول التي تريد تحديثها وقيمها الجديدة، ثم استخدام ذلك لتعديل كائن شركتك باستخدام قيم جديدة. هنا 's ما هو ممتع في إجراء ذلك في Python -- تمثل مكتبة العملاء الشركة كعنصر قاموس، مما يعني أن الطريقة مُدمجة مسبقًا في. لست بحاجة إلى تكرار دائري! أنشئ كائن قاموس مباشرة أسفل الرمز الذي كتبته.

update_company.py

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

وما عليك سوى إنشاء كائن طلب (اطّلِع على وثائق التصحيح للحصول على تفاصيل حول ما يمكن أن يتضمّنه هناك) وتنفيذ طلب البيانات من واجهة برمجة التطبيقات.

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

وجدير بالذكر أن طلب البيانات من واجهة برمجة التطبيقات هو نفسه. يتمثل الاختلاف في أن كائن الطلب يحتوي الآن على حقلين (company وupdate_mask)، بدلاً من حقل واحد فقط (company). قناع التحديث هو قائمة حقول مفصولة بفواصل. إذا أردنا تضمين الحقل "websiteUri" في القناع ، ستبدو قيمة القناع بدلاً من ذلك:

   mask = 'displayName,websiteUri'

بصرف النظر عن المسار الذي تختاره، شغّله من خلال واجهة Cloud 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'}
$

ولن يكون هناك حلّ كثيرة للبحث عن حل للبحث عن وظائف بدون وظائف للبحث عنها. في القسم الأخير، تحدثنا عن إنشاء الشركات. لنتحدّث الآن عن كيفية إنشاء وظائف وأفضل الممارسات للعمل معها.

ملاحظة: سيتم إرفاق الوظائف بالشركات. إذا لم يكن لديك أي شركات تم إنشاؤها باستخدام واجهة برمجة التطبيقات حتى الآن (أو إذا نجحت في تشغيل &quot &delete" في نهاية القسم وإزالة شركتك الوحيدة)، فارجع وأنشئ شركة مرة أخرى. بعد ذلك، ستكون مستعدًا لإنشاء وظائف.

إنشاء وظيفة

لنبدأ بإنشاء وظيفة.

لإنشاء وظيفة، ستحتاج إلى البيانات التالية:

  • اسم الشركة. ليست سلسلة بشرية محدودة المسؤولية أو اقتباسًا، إنّما أطول من ذلك
  • معرّف طلب للوظيفة. يشبه هذا المعرّف external_id للشركة، فهو يمثّل المعرّف الفريد للوظيفة، وذلك لتسهيل الحفاظ على مزامنة واجهة برمجة تطبيقات Cloud Talent Solution API مع حل الوظيفة الحالي، مثل adult_llama_wrangler.
  • عنوان الوظيفة، وهو الاسم المعروض للوظيفة، مثل "";Llama Wrgler"&&quot
  • وصف الوظيفة. لاحظ أن الوصف يمكن أن يحتوي على رمز HTML مضمن حتى تتمكن من تنسيقه بشكل صحيح. لا يفسح المجال عن المحتوى. "<p> لأحد قادة فريق tamashers.</p><p> القادة
  • applicationInfo - مزيد من المعلومات حول كيفية تقديم طلب يمكن أن يكون عنوان URL واحدًا أو أكثر أو عنوان بريد إلكتروني واحدًا أو سلسلة بتنسيق HTML مع تعليمات إضافية. ويمكنك أيضًا تضمين جميع الخيارات الثلاثة. ولكن يجب تضمين مصدر واحد على الأقل.

إذا اضطررنا إلى إنشاء وظيفة لشركتنا التي تم إنشاؤها سابقًا FooCorp، فهذا ما قد تبدو عليه الحقول:

name

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

requisition_id

كبار السن

title

كبار السن "لاما رانجلر"

description

مطلوب من "لاما رانجلر" المتمرّسة الحصول على وظيفة بدوام كامل. يجب أن تكون لديك القدرة على القيادة، لأنك ستتولى مهمة تشكيل فريق من مقدّمي الرعاية اللاما وتدريبهم على اصطياد صياد الحيوانات على نطاق واسع. يعجبني حقًا. هذه بعض اللاما.

application_info

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

عناوين البريد الإلكتروني: llama-apply@example.com

إذا لم يعد لديك اسم الشركة، يمكنك استخدام الرمز "get_company" الذي استخدمته في الخطوة 3 لاسترداده.

سيبدو رمز إنشاء الوظيفة مشابهًا جدًا لرمز إنشاء الشركة. يجب أن تكون الأسطر القليلة الأولى مألوفة لك (للاستيراد من المهمة، إنشاء كائن خدمة العملاء). بعد ذلك، تنشئ كائن إملاء (فقط مجموعة مدمجة من أزواج المفاتيح/القيمة) تمثل طلبك، وترسله مع استدعاء "create" واجهة برمجة التطبيقات.

الصق المقتطف التالي في ملف باسم 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" وأضفنا إلى متغير المهمة_الاسمية. لنلقِ نظرة على معلومات الوظيفة أولاً.

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)   

يحقّق المقتطفان أعلاه الإجراء نفسه: يتم تعديل إعلان وظيفة محدّد باستخدام المسمّى الوظيفي؛ لاحظ أيضًا أن السطر الذي يجري طلب بيانات من واجهة برمجة التطبيقات هو نفسه: الاختلاف الوحيد في كائن الطلب. يحتوي أحدهما على كائن وظيفي كامل سيحل محل العنصر الذي اخترته. وتضم الحقول الأخرى مجموعة من الحقول يمكن تحديثها.

وأيًا كان الأمر الذي تختار تشغيله، ستكون النتيجة هي نفسها. ننصحك بتجربة الميزة.

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

للمساعدة في إزالة البرامج غير المرغوب فيها أثناء استكشاف واجهة برمجة التطبيقات هذه، نكتب هنا نصًا برمجيًا بسيطًا بلغة 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

والآن جرِّب تشغيله مرة أخرى. يجب أن تكون القيم التي يتم عرضها من طلبات البيانات من واجهة برمجة التطبيقات هذه هي الإدخالات الحالية &"company" &"job" والتي يجب أن تكون فارغة.

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

عذرًا. أحسنت.

حَاجَة أَخِيرَة. نجح الحل المذكور أعلاه لأنك بصفتك القارئ،

  • سبق أن تضمّنت الشركة اسم الوظيفة الوظيفية الحالية.
  • "لم يتم إنشاء" &#39؛عدد كبير جدًا من الوظائف لحذفها يدويًا.

دعنا نتظاهر بأنّه لم يكن الأمر كذلك

هناك طلب بيانات من واجهة برمجة التطبيقات، 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.

المواضيع التي تناولناها

  • إنشاء الشركات وإدارتها
  • إنشاء إعلانات الوظائف لتلك الشركات وإدارتها
  • إعداد حسابات الخدمة للتفاعل مع واجهة برمجة التطبيقات بالنيابة عنك

مزيد من المعلومات