Como implementar a pesquisa de deslocamento diário na sua IU (v3)

É possível integrar a pesquisa de deslocamento diário em sua IU para permitir que candidatos procurem vagas dentro de uma área geográfica, definida pelo tempo de deslocamento. A pesquisa de deslocamento diário calcula o tempo com base no meio de transporte selecionado pelo usuário e na hora do dia em que se planeja viajar.

  1. O Cloud Talent Solution deve estar conectado à sua interface do usuário antes de poder implementar a pesquisa de deslocamento diário. Siga os guias de início rápido para configurar o Cloud Talent Solution.

  2. A pesquisa de deslocamento diário utiliza os dados de endereço carregados com suas vagas durante a implementação do CTS para calcular o tempo de deslocamento. Para ativar esse recurso na interface atual do usuário do CTS, envie uma solicitação jobs.search e inclua um objeto CommuteFilter no campo JobQuery.commuteFilter. commuteMethod, travelDuration e startCoordinates são campos obrigatórios.

    Java

    Para mais informações sobre a instalação e criação de um cliente no Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

    
    public static void commuteSearch(String companyName) throws IOException, InterruptedException {
      // Make sure to set the requestMetadata the same as the associated search request
      RequestMetadata requestMetadata =
          new RequestMetadata()
              // Make sure to hash your userID
              .setUserId("HashedUserId")
              // Make sure to hash the sessionID
              .setSessionId("HashedSessionID")
              // Domain of the website where the search is conducted
              .setDomain("www.google.com");
      JobQuery jobQuery =
          new JobQuery()
              .setCommuteFilter(
                  new CommuteFilter()
                      .setRoadTraffic("TRAFFIC_FREE")
                      .setCommuteMethod("TRANSIT")
                      .setTravelDuration("1000s")
                      .setStartCoordinates(
                          new LatLng().setLatitude(37.422408).setLongitude(-122.085609)));
      if (companyName != null) {
        jobQuery.setCompanyNames(Arrays.asList(companyName));
      }
    
      SearchJobsRequest searchJobsRequest =
          new SearchJobsRequest()
              .setJobQuery(jobQuery)
              .setRequestMetadata(requestMetadata)
              .setJobView("JOB_VIEW_FULL")
              .setRequirePreciseResultSize(true);
      SearchJobsResponse response =
          talentSolutionClient
              .projects()
              .jobs()
              .search(DEFAULT_PROJECT_ID, searchJobsRequest)
              .execute();
      Thread.sleep(1000);
      System.out.printf("Search jobs for commute results: %s\n", response);
    }

    Python

    Para mais informações sobre a instalação e criação de um cliente no Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

    def commute_search(client_service, company_name):
        request_metadata = {
            "user_id": "HashedUserId",
            "session_id": "HashedSessionId",
            "domain": "www.google.com",
        }
        start_location = {"latitude": 37.422408, "longitude": -122.085609}
        commute_preference = {
            "road_traffic": "TRAFFIC_FREE",
            "commute_method": "TRANSIT",
            "travel_duration": "1000s",
            "start_coordinates": start_location,
        }
        job_query = {"commute_filter": commute_preference}
        if company_name is not None:
            job_query.update({"company_names": [company_name]})
        request = {
            "job_query": job_query,
            "request_metadata": request_metadata,
            "job_view": "JOB_VIEW_FULL",
            "require_precise_result_size": True,
        }
        response = (
            client_service.projects().jobs().search(parent=parent, body=request).execute()
        )
        print(response)
    
    

    Go

    Para mais informações sobre a instalação e criação de um cliente no Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

    
    // commuteSearch searches for jobs within commute filter.
    func commuteSearch(w io.Writer, projectID, companyName string) (*talent.SearchJobsResponse, error) {
    	ctx := context.Background()
    
    	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
    	if err != nil {
    		return nil, fmt.Errorf("google.DefaultClient: %w", err)
    	}
    	// Create the jobs service client.
    	service, err := talent.New(client)
    	if err != nil {
    		return nil, fmt.Errorf("talent.New: %w", err)
    	}
    
    	jobQuery := &talent.JobQuery{
    		CommuteFilter: &talent.CommuteFilter{
    			RoadTraffic:    "TRAFFIC_FREE",
    			CommuteMethod:  "TRANSIT",
    			TravelDuration: "1000s",
    			StartCoordinates: &talent.LatLng{
    				Latitude:  37.422408,
    				Longitude: -122.085609,
    			},
    		},
    	}
    	if companyName != "" {
    		jobQuery.CompanyNames = []string{companyName}
    	}
    
    	parent := "projects/" + projectID
    	req := &talent.SearchJobsRequest{
    		// Make sure to set the RequestMetadata the same as the associated
    		// search request.
    		RequestMetadata: &talent.RequestMetadata{
    			// Make sure to hash your userID.
    			UserId: "HashedUsrId",
    			// Make sure to hash the sessionID.
    			SessionId: "HashedSessionId",
    			// Domain of the website where the search is conducted.
    			Domain: "www.googlesample.com",
    		},
    		// Set the actual search term as defined in the jobQuery.
    		JobQuery: jobQuery,
    		// Set the search mode to a regular search.
    		SearchMode:               "JOB_SEARCH",
    		RequirePreciseResultSize: true,
    	}
    	resp, err := service.Projects.Jobs.Search(parent, req).Do()
    	if err != nil {
    		return nil, fmt.Errorf("failed to search for jobs with commute filter: %w", err)
    	}
    	return resp, nil
    }
    

    Ruby

    Para mais informações sobre a instalação e criação de um cliente no Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

    # project_id              = "Id of the project"
    # commute_method          = "The method of transportation for which to calculate the commute time"
    # travel_duration         = "The maximum travel time in seconds"
    # start_coordinates       = "The latitude and longitude of the location from which to calculate the commute time"
    
    require "google/apis/jobs_v3"
    
    jobs = Google::Apis::JobsV3
    talent_solution_client = jobs::CloudTalentSolutionService.new
    # @see https://developers.google.com/identity/protocols/application-default-credentials#callingruby
    talent_solution_client.authorization = Google::Auth.get_application_default(
      "https://www.googleapis.com/auth/jobs"
    )
    
    # Make sure to set the request_metadata the same as the associated search request
    request_metadata = jobs::RequestMetadata.new user_id:    "HashedUserId",
                                                 session_id: "HashedSessionId",
                                                 domain:     "www.google.com"
    # Set location filter
    commute_filter = jobs::CommuteFilter.new road_traffic:      "TRAFFIC_FREE",
                                             commute_method:    commute_method,
                                             travel_duration:   travel_duration,
                                             start_coordinates: start_coordinates
    # Perform a search for analyst  related jobs
    search_jobs_request =
      jobs::SearchJobsRequest.new request_metadata:            request_metadata,
                                  job_query:                   (jobs::JobQuery.new commute_filter: commute_filter),
                                  job_view:                    "JOB_VIEW_FULL",
                                  require_precise_result_size: true
    search_jobs_response = talent_solution_client.search_jobs project_id, search_jobs_request
    puts search_jobs_response.to_json
    search_jobs_response

Recomendações para sua IU

  1. O Cloud Talent Solution não permite a pesquisa por distância (que usa o filtro de localização do CTS) e pelo tempo de deslocamento diário ao mesmo tempo. Use uma abordagem de 2 guias, ou similar, para permitir que os candidatos acessem as duas opções.

  2. Modifique o front-end de seu aplicativo para que, quando um candidato solicitar uma pesquisa de deslocamento diário, o back-end preencha as informações relevantes no filtro de deslocamento e chame a API, assim como seria em uma solicitação de pesquisa regular.

  3. Inclua estes itens recém-adicionados em sua interface do usuário:

    • Uma opção para decidir se é uma pesquisa de distância ou de deslocamento diário. Por exemplo, sua interface de pesquisa do usuário pode se parecer com o exemplo abaixo:

    • Um menu suspenso das opções de método de deslocamento.

    • Uma opção para ajustar as condições de tráfego.

    • O tempo total de viagem (60 minutos é o tempo máximo de viagem permitido).

    • Início do deslocamento.

  4. A informação do tempo de deslocamento obtida da API é usada para exibir informações ao candidato. Apenas as vagas relevantes, localizadas dentro da área de tempo de deslocamento designado, são mostradas na lista de resultados. Consulte a documentação das Práticas recomendadas de procura de emprego para uma discussão sobre as formas de ajustar a ordem e o número de vagas retornadas nessa área.

É possível aproveitar a API do Google Maps para gerar um mapa com base nas informações de tempo de deslocamento retiradas da API do CTS e incorporá-lo nos resultados obtidos de um candidato. O pacote da API do Google Maps tem várias opções de exibição de mapa. Algumas opções da API do Google Maps são mais eficazes que outras. Por exemplo, a visualização do mapa de calor JavaScript do Google Maps combinada com o clustering de marcadores é uma ótima maneira de ver as vagas relevantes que aparecem para um candidato dentro da região determinada pelas preferências de deslocamento diário dele. Por outro lado, o Modo de direção não mostra todas as vagas obtidas em uma solicitação de pesquisa, e não é uma opção recomendada.

Para mais informações sobre a implementação de uma pesquisa com base em deslocamento, consulte o guia de instruções de pesquisa por deslocamento diário.