API Job Search avec Google Cloud

Dans cet atelier de programmation, vous allez apprendre à améliorer la recherche d'emploi et l'acquisition de talents pour votre organisation à l'aide de l'API Cloud Talent Solution. Grâce à CTS, vous pouvez profiter de la puissance du machine learning lorsque vous recherchez des offres d'emploi.

Points abordés

  • Activer CTS dans votre projet Google Cloud
  • Créer des entités et emplois au sein de ces entreprises

Prérequis

  • Projet Google Cloud avec facturation déjà configuré (si vous n'en avez pas, créez-en un).
  • Environ une heure

Comment allez-vous utiliser ce tutoriel ?

Je vais le lire uniquement Je vais le lire et effectuer les exercices

Comment évalueriez-vous votre expérience antérieure avec Google Cloud Platform ?

Novice Intermédiaire Expert

Ce tutoriel est destiné à être exécuté entièrement sur Google Cloud Platform. Aucun téléchargement n'est requis sur votre poste de travail.

Activer l'API Cloud Talent Solutions

Ouvrez votre application dans Cloud Console, puis cliquez sur le menu à trois barres en haut à gauche. Parcourez les menus jusqu'à la section Talent Solution -> Overview (Talent Solution - > Présentation).

Comme il s'agit d'un nouveau projet, vous serez redirigé vers un nouvel écran vous invitant à activer l'API. Cliquez sur "Activer" et attendez quelques minutes que l'API soit activée pour ce projet.

Activer la journalisation des données

Revenez maintenant à la page de présentation. Une nouvelle boîte de dialogue s'affiche pour vous demander d'activer la journalisation des données. Si ce n'est pas le cas, revenez à la page précédente. L'API de recherche d'emploi est alimentée par un modèle de machine learning qui nécessite des données. Cette intégration vous permettra d'envoyer des événements aux utilisateurs qui cherchent à entraîner ces modèles. Lorsque cette opération est effectuée via le code, vous pouvez spécifier les informations qui doivent être envoyées.

Nous verrons en détail en quoi consistent ces événements et comment les envoyer plus tard, mais les modèles pré-entraînés fonctionneront parfaitement. Activez la journalisation des données, puis cliquez sur "Connection accounts" (Connexions au compte de service) dans le menu de navigation de gauche de cette boîte de dialogue.

Configurer un compte de service

Lorsque vous effectuez des requêtes API, vous devez les effectuer pour le compte d'un véritable compte authentifié. Pour ce faire, nous vous recommandons de suivre les bonnes pratiques de Google Cloud Platform. Considérez les comptes de service comme un moyen simple de configurer des utilisateurs authentifiés disposant d'autorisations limitées. Vous pourrez ainsi créer un système indépendant et sécurisé.

Par exemple, un compte de service sera nécessaire pour utiliser l'API de recherche d'emploi. À la création et à l'attribution d'autorisations de lecture/écriture via l'éditeur de tâches, dans la section Cloud Solutions de gauche du menu de navigation de gauche. Il est également possible de configurer un compte de service avec un "lecteur de tâches" uniquement avec un accès en lecture seule.

Lors de l'étape suivante, vous serez invité à autoriser les utilisateurs à accéder à ce compte de service. Vous pouvez ignorer cette étape, mais veillez à cliquer sur "Créer une clé" en bas de l'écran. Sélectionnez "JSON" pour le type de clé, puis "Créer". Un nouveau fichier d'identifiants JSON est automatiquement téléchargé. Stockez ce fichier sur votre serveur. Le code que vous écrirez dans une section ultérieure l'utilisera pour vous authentifier.

Définir des variables d'environnement

Pour plus de commodité, nous allons utiliser Google Cloud Shell. Vous pouvez le faire depuis votre propre environnement de développement. Assurez-vous d'installer le SDK Google Cloud et les bibliothèques clientes dans le langage de votre choix. Cet atelier de programmation utilisera Python. Les bibliothèques clientes cloud sont déjà installées dans Cloud Shell. Sérieusement ?

Pour exécuter du code à l'aide des bibliothèques, vous devez vous assurer que deux variables d'environnement sont définies: la première pour spécifier l'ID de campagne, la seconde pour spécifier le fichier de clé de votre compte de service. Allons-y.

À partir de votre projet, cliquez sur l'icône &&tt;_" en haut à droite de la console Web pour ouvrir une fenêtre Cloud Shell. Ajoutez les variables d'environnement suivantes pour spécifier votre ID de projet et définir un chemin d'accès à votre fichier de clé JSON:

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

Pour vérifier que les variables ont été définies, utilisez "echo".

echo $GOOGLE_CLOUD_PROJECT
echo $GOOGLE_APPLICATION_CREDENTIALS

Ouvrir l'éditeur de code dans Cloud Shell

Dans Google Cloud Console, ouvrez Cloud Shell à l'aide de l'icône Cloud Shell située en haut à droite.

Une icône est composée d'icônes en haut à droite de Cloud Shell. Cliquez sur File -> Launch Code Editor (Fichier -> Éditeur du code de lancement), comme indiqué ci-dessous:

Créer une entreprise

Utilisez l'option File -> New File (Fichier -g; Nouveau fichier) pour créer un fichier source et renseignez-le avec le contenu ci-dessous. Appelez-le create_company.py.

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

Quelles opérations ce code effectue-t-il ? Explorons ! Il existe deux appels importants dans la bibliothèque cliente ici:

  • client_service = build('jobs', 'v3') crée un objet de service à l'aide de la bibliothèque cliente Python de l'API Google.
  • client_service.projects().companies().create(parent=project_id, body=request).execute() exécute l'appel d'API pour créer l'entreprise. La réponse à cet appel est un objet contenant des informations sur l'entreprise. Le contenu de l'objet de la requête et de l'objet de la réponse est détaillé dans la documentation sur la méthode de création.

Exécutez le fichier à partir de l'invite de commande (qui se trouve directement sous la fenêtre de l'éditeur de code). Vous obtenez alors un résultat semblable à celui-ci :

> 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 

Le name est l'identifiant unique généré par l'API de recherche d'emploi, tandis que le champ external_id est l'identifiant que vous fournissez à partir de votre propre système d'offres d'emploi. Chaque fois que vous référencez un objet via l'API, vous devez utiliser le nom.

Mettre à jour l'entreprise

Si le système comporte déjà une entité, et que vous souhaitez ajouter ou modifier des champs, la procédure est décomposée comme suit:

  • Créer un objet avec les valeurs de champ actuelles de l'entreprise
  • Mettez à jour cet objet avec les nouveaux champs ou les champs mis à jour, en utilisant le champ "nom " entreprise comme clé afin que l'API sache quelle entreprise mettre à jour
  • Envoyez le nouvel objet à l'aide de la méthode "patch".

Notez que ce processus nécessite que vous disposiez de toutes les valeurs existantes, car celui-ci remplace simultanément les valeurs de l'entreprise, indépendamment de celles que vous avez réellement mises à jour. C'est pourquoi nous devons les récupérer avant de mettre à jour ces informations.

Créez un fichier update_company.py dans votre espace de travail. Si ce n'est pas le cas, ajoutez la méthode get_company ci-dessous.

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

À ce stade, vous remarquerez que l'appel d'API ressemble énormément à la création d'une entreprise. La bibliothèque cliente est générée pour correspondre à une interface REST. Par conséquent, les opérations CRUD que vous effectuez sur les entreprises vont toutes prendre la forme client_service.projects().companies().theMethod(argName=argValue).execute().

Maintenant que nous disposons de l'ensemble des valeurs existantes, créez un objet "&patch" avec les noms de champs que vous souhaitez mettre à jour et leurs nouvelles valeurs, puis utilisez-les pour mettre à jour les objets de votre entreprise. Voici ce que vous pouvez faire avec Python : la bibliothèque cliente représente l'entreprise en tant qu'objet dictionnaire, ce qui signifie que la méthode est déjà intégrée. Aucune boucle élégante ! Créez un objet " dictionnaire" juste en dessous du code déjà écrit.

update_company.py.

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

Il ne vous reste désormais qu'à créer un objet de requête (consultez la documentation sur les correctifs pour en savoir plus) et exécuter l'appel d'API.

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

Si vous ne souhaitez fournir que les champs que vous souhaitez réellement modifier, vous pouvez les inclure avec un masque de mise à jour. Cela s'avère utile dans les cas où vous n'avez pas encore configuré de paramètres d'objet d'entreprise ou si vous ne souhaitez ajouter qu'un seul champ à mettre à jour et que vous ne souhaitez pas envoyer des objets inutilement volumineux. Mais comment utiliser un masque de mise à jour pour poser la question suivante ? Où se trouve le code qui illustre cette méthode innovante et innovante en matière de mise à jour des informations de l'entreprise ?

Vous lavez les pensées ! L'extrait ci-dessous exécute une mise à jour des informations de l'entreprise à l'aide d'un masque de mise à jour, et non d'une entrée de remplacement complète.

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

Notez que l'appel d'API est identique. La différence réside dans le fait que l'objet de la requête contient désormais deux champs (entreprise et update_mask), au lieu d'un seul (entreprise). Le masque de mise à jour est une liste de champs séparés par une virgule. Si vous souhaitez inclure le champ "&urigros" du masque, la valeur du masque doit ressembler à ceci:

   mask = 'displayName,websiteUri'

Quelle que soit la méthode choisie, exécutez-la à partir de Cloud Shell, et (en supposant que vous ayez laissé ces instructions d'impression) un résultat indiquant les anciennes et nouvelles valeurs pour votre entreprise.

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

Rien ne serait utile pour une solution de recherche d'emploi sans emploi ! Dans la dernière section, nous avons parlé de la création d'entreprises. Voyons à présent comment créer des offres d'emploi et des bonnes pratiques concernant la collaboration.

Notez que les emplois seront joints aux entreprises. Si vous n'avez pas encore créé d'entreprise utilisant l'API (ou si vous avez réussi à supprimer et supprimer la seule entreprise), appelez de nouveau la société pour en créer une autre. Vous pourrez alors créer des offres d'emploi.

Créer une tâche

Commençons par créer une tâche !

Pour créer une tâche, vous avez besoin des données suivantes:

  • Nom de l'entreprise. Ce n'est pas une chaîne lisible par Mon entreprise fantaisiste LLC, mais une chaîne beaucoup plus longue &projects/[PROJECT_ID]/companies/COMPANY_ID
  • ID de demande de l'offre d'emploi. Cet identifiant est semblable à external_id d'une entreprise. Il représente votre propre identifiant unique pour la tâche afin de faciliter la synchronisation de l'API Cloud Talent Solution avec votre solution actuelle (par exemple, senior_llama_wrangler).
  • title du poste, qui correspond au nom à afficher pour le poste, par exemple "Senior Llama Wrangler""
  • Description de l'offre d'emploi. Notez que la description peut contenir du code HTML intégré pour que vous puissiez la mettre en forme correctement. Le contenu est assez évident. & qu'il;
  • applicationInfo : informations supplémentaires sur la procédure de candidature. Il peut s'agir d'un URI ou plus, d'une adresse e-mail ou d'une chaîne au format HTML avec des instructions supplémentaires. Vous pouvez même inclure les trois. Vous devez en inclure au moins 1.

Ainsi, si nous créons un emploi pour la société FooCorp précédemment créée, les champs peuvent se présenter comme suit:

name

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

requisition_id [identifiant_requisition]

senior_llama_wrangler

title

Llama wrangler senior

description

Llama Wrangler expérimenté requis pour un poste à temps plein. Capacité à diriger une équipe, car vous allez former une équipe de soignants lamas et l'entraîner à des montures à grande échelle.<p/>Doit bien travailler avec les animaux et être parfois préparés à courir vraiment, comme très vite. comme à la vitesse... Voici quelques lamas.

infos_application

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

E-mails: llama-apply@example.com

Si vous n'avez plus le nom de l'entreprise, vous pouvez utiliser le code &get_company" utilisé lors de l'étape 3 pour le récupérer.

Le code permettant de créer une offre d'emploi ressemble beaucoup à celui utilisé pour créer une entreprise. Les premières lignes doivent vous être familiers (import bla blah blah, instancier l'objet de service client). Créez ensuite un objet dict (tout simplement un ensemble imbriqué de paires clé/valeur) représentant votre requête, puis envoyez-le avec l'appel d'API &create.create.

Collez l'extrait suivant dans un fichier nommé create_job.py. Vous pouvez l'appeler comme vous le souhaitez, mais ce tutoriel suppose ce nom de fichier.

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

Exécutez-le à partir de Cloud Shell pour obtenir un grand blob JSON avec la tâche que vous venez de créer.

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

Si vous obtenez un résultat semblable à celui ci-dessus, vous avez créé une tâche.

Les tâches doivent être uniques

À titre de test, exécutez à nouveau ce dernier script et voyons ce qui se passe.

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

Pourquoi ? Vous avez essayé de saisir une offre d'emploi en double. Les tâches non expirées doivent être uniques dans le système.

L'unicité est déterminée par les champs suivants:

  • Nom de l'entreprise (obligatoire lors de la création d'une offre d'emploi, non modifiable)
  • ID de demande : obligatoire lors de la création d'une offre d'emploi, non modifiable
  • Code de langue : facultatif, valeur par défaut "en_us" et mise à jour

Si une tâche que vous essayez de créer ou de mettre à jour a les trois champs en commun avec une tâche existante, qui n'a pas expiré, elle est considérée comme un doublon et que l'opération de création ou de mise à jour échoue, avec le message d'erreur suivant.

Bravo,

Félicitations ! Vous possédez à la fois une entreprise ET une offre d'emploi pour cette entreprise dans votre système. Et vous y êtes arrivé moins d'une heure ! Avez-vous une idée du temps nécessaire pour que les meilleurs sites d'offres d'emploi sur Internet atteignent ce point ? Cela fait plus d'une heure. comme autre . Semaines. Mois. Réunions du conseil d'administration Il y avait probablement des feuilles de calcul et des déclarations de mission impliquées. Cela m'est très vrai. Vous savez tout ce qu'il vous faut ? Un peu moins d'une heure. C'est donc un sans faute !

Il y a aussi ! Continuons.

Mettre à jour une tâche

Comme dans les entreprises, nous pouvons obtenir une adresse pour en afficher les détails, puis l'ajouter pour la mettre à jour.

Voici comment obtenir les détails de l'offre. Si l'extrait ci-dessous vous semble familier, c'est parce que nous avons pris la méthode "get_company" de la section précédente, et remplacé l'entreprise, par ""job", et ajouté dans la variable job_name. Voyons d'abord comment obtenir des informations sur la tâche.

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)

Pour mettre à jour l'offre d'emploi, vous disposez des mêmes options qu'auparavant lors de la mise à jour de l'entreprise: envoyer un objet complet avec des valeurs mises à jour pour remplacer l'ancien, ou envoyer un correctif plus petit avec un masque de champ séparé par une virgule.

update_job.py (mise à jour avec remplacement de l'objet complet)

   # 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 (avec uniquement les nouvelles valeurs du champ et un masque de mise à jour)

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

Les deux extraits ci-dessus ont le même effet: ils mettent à jour une offre d'emploi spécifique avec l'intitulé du poste Rogue Llama Acquisition Engineer. Notez également que la ligne qui effectue l'appel d'API est identique: la seule différence réside dans l'objet de requête. Le premier présente un objet de tâche complet qui remplace celui par le nom de cette tâche. Le second est simplement un ensemble de champs à mettre à jour.

La sortie sera identique, quelle que soit l'exécution. N'hésitez pas à tenter votre chance.

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

Bravo ! Vous avez terminé l'étape 4 !

Eh bien, regardez-vous. Le petit plus : un monstre de productivité. Jusqu'à présent, vous pouvez créer des entreprises, créer des offres d'emploi et effectuer les mises à jour instantanément. Cependant, vous avez sans doute remarqué une chose étrange dans vos leçons. Cette dernière opération qui place le D dans C.R.U.D. Et si nous souhaitons les SUPPRIMER ? Ne vous inquiétez pas, lecteur ! La section suivante aborde ce sujet en détail.

Commençons par les entreprises, pour des raisons qui maintenant que la narration a du sens, dans cinq minutes à compter d'aujourd'hui.

Supprimer une entreprise

Supprimer une entreprise est un jeu d'enfant. Utilisez les mêmes instructions d'importation que lors de la création ou de la mise à jour d'une entreprise. Il vous suffit d'appeler la méthode delete en indiquant uniquement le nom de l'entreprise (aucun corps de requête nécessaire).

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

Pour vous aider à effectuer un nettoyage pendant que vous explorez cette API, voici un script Python simple qui utilise un nom d'entreprise comme paramètre de ligne de commande et qui, selon vous, le supprime.

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

Appelez-le et transmettez le nom de l'entreprise en tant qu'argument de ligne de commande unique.

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

Et voilà ! Attendez une seconde. Qu'est-ce que c'est ? Une erreur ? &quot toujours ouvert ;

Oui ! Vous connaissez désormais la première règle de suppression des entreprises: elle échouera tant qu'elle continuera à proposer des offres. Comment faire face à cette situation ? Nous devons passer en revue toutes les offres d'emploi associées à cette entreprise et les supprimer.

Maintenant, le fait qu'il s'agit d'une activité totalement raisonnable consiste à supprimer le travail que je viens de créer, puis à supprimer l'entreprise qui l'a conduit. C'est logique, le lecteur ! C'est parti.

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

Réessayez de l'exécuter. Les valeurs renvoyées par ces appels d'API doivent correspondre aux entrées actuelles de l'entreprise et de l'emploi. Autrement dit, elles doivent être vides.

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

Ahh. Bien joué.

Une dernière chose ! La solution ci-dessus a très bien fonctionné, car vous, le lecteur,

  • Vous aviez déjà le nom de toutes les offres d'emploi existantes de cette entreprise.
  • Hadn't a créé beaucoup trop pour supprimer manuellement des offres d'emploi pour cette entreprise.

Faisons croire que ce n'est pas le cas

Il s'agit d'un appel d'API, jobs.list(), qui renvoie les tâches correspondant à un ID de projet et à une société mère spécifiques. Pour appeler cette méthode, procédez comme suit:

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

Vous pouvez désormais créer et gérer des entreprises et des offres d'emploi grâce à l'API Google Cloud Talent Solutions Search Search.

Points abordés

  • Création et gestion d'entreprises
  • Créer et gérer des offres d'emploi pour ces entreprises
  • Configurer des comptes de service pour qu'ils interagissent avec l'API en votre nom

En savoir plus