Search jobs by commute distance.
Documentation pages that include this code sample
To view the code sample used in context, see the following documentation:
- Commute search
- Commute search (v4beta1)
- Implementing commute search in your UI
- Implementing commute search in your UI (v4beta1)
Code sample
C#
public static object CommuteSearchJobs(string projectId, string tenantId)
{
JobServiceClient jobServiceClient = JobServiceClient.Create();
TenantName name = TenantName.FromProjectTenant(projectId, tenantId);
string domain = "www.example.com";
string sessionId = "Hashed session identifier";
string userId = "Hashed user identifier";
RequestMetadata requestMetadata = new RequestMetadata
{
Domain = domain,
SessionId = sessionId,
UserId = userId
};
CommuteMethod commuteMethod = CommuteMethod.Driving;
long seconds = 3600L;
Duration travelDuration = new Duration
{
Seconds = seconds
};
double latitude = 37.422408;
double longitude = -122.084068;
LatLng startCoordinates = new LatLng
{
Latitude = latitude,
Longitude = longitude
};
CommuteFilter commuteFilter = new CommuteFilter
{
CommuteMethod = commuteMethod,
TravelDuration = travelDuration,
StartCoordinates = startCoordinates
};
JobQuery jobQuery = new JobQuery
{
CommuteFilter = commuteFilter
};
SearchJobsRequest request = new SearchJobsRequest
{
ParentAsTenantName = name,
RequestMetadata = requestMetadata,
JobQuery = jobQuery
};
var response = jobServiceClient.SearchJobs(request);
foreach (var result in response)
{
Console.WriteLine($"Job summary: {result.JobSummary}");
Console.WriteLine($"Job title snippet: {result.JobTitleSnippet}");
Job job = result.Job;
Console.WriteLine($"Job name: {job.Name}");
Console.WriteLine($"Job title: {job.Title}");
}
return 0;
}
Go
import (
"context"
"fmt"
"io"
talent "cloud.google.com/go/talent/apiv4beta1"
"github.com/golang/protobuf/ptypes/duration"
talentpb "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
"google.golang.org/genproto/googleapis/type/latlng"
)
// commuteSearch searches for jobs within commute filter.
func commuteSearch(w io.Writer, projectID, companyID string) error {
ctx := context.Background()
// Initialize a jobService client.
c, err := talent.NewJobClient(ctx)
if err != nil {
return fmt.Errorf("talent.NewJobClient: %v", err)
}
// Construct a jobQuery request with a commute filter.
jobQuery := &talentpb.JobQuery{
CommuteFilter: &talentpb.CommuteFilter{
CommuteMethod: talentpb.CommuteMethod_TRANSIT,
TravelDuration: &duration.Duration{Seconds: 1800},
StartCoordinates: &latlng.LatLng{
Latitude: 37.422408,
Longitude: -122.085609,
},
},
}
if companyID != "" {
jobQuery.Companies = []string{fmt.Sprintf("projects/%s/companies/%s", projectID, companyID)}
}
// Construct a searchJobs request with a jobQuery.
req := &talentpb.SearchJobsRequest{
Parent: fmt.Sprintf("projects/%s", projectID),
// Make sure to set the RequestMetadata the same as the associated
// search request.
RequestMetadata: &talentpb.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,
}
resp, err := c.SearchJobs(ctx, req)
if err != nil {
return fmt.Errorf("SearchJobs: %v", err)
}
for _, job := range resp.GetMatchingJobs() {
fmt.Fprintf(w, "Matcing Job: %q\n", job.GetJob().GetName())
fmt.Fprintf(w, "Job address: %v\n", job.GetCommuteInfo().GetJobLocation().GetPostalAddress().GetAddressLines())
}
return nil
}
Java
import com.google.cloud.talent.v4beta1.CommuteFilter;
import com.google.cloud.talent.v4beta1.CommuteMethod;
import com.google.cloud.talent.v4beta1.Job;
import com.google.cloud.talent.v4beta1.JobQuery;
import com.google.cloud.talent.v4beta1.JobServiceClient;
import com.google.cloud.talent.v4beta1.RequestMetadata;
import com.google.cloud.talent.v4beta1.SearchJobsRequest;
import com.google.cloud.talent.v4beta1.SearchJobsResponse;
import com.google.cloud.talent.v4beta1.TenantName;
import com.google.protobuf.Duration;
import com.google.type.LatLng;
import java.io.IOException;
public class CommuteSearchJobs {
public static void searchJobs() throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String tenantId = "your-tenant-id";
searchJobs(projectId, tenantId);
}
// Search Jobs with histogram queries.
public static void searchJobs(String projectId, String tenantId) throws IOException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests. After completing all of your requests, call
// the "close" method on the client to safely clean up any remaining background resources.
try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
TenantName parent = TenantName.of(projectId, tenantId);
String domain = "www.example.com";
String sessionId = "Hashed session identifier";
String userId = "Hashed user identifier";
RequestMetadata requestMetadata =
RequestMetadata.newBuilder()
.setDomain(domain)
.setSessionId(sessionId)
.setUserId(userId)
.build();
CommuteMethod commuteMethod = CommuteMethod.DRIVING;
long seconds = 3600L;
Duration travelDuration = Duration.newBuilder().setSeconds(seconds).build();
double latitude = 37.422408;
double longitude = -122.084068;
LatLng startCoordinates =
LatLng.newBuilder().setLatitude(latitude).setLongitude(longitude).build();
CommuteFilter commuteFilter =
CommuteFilter.newBuilder()
.setCommuteMethod(commuteMethod)
.setTravelDuration(travelDuration)
.setStartCoordinates(startCoordinates)
.build();
JobQuery jobQuery = JobQuery.newBuilder().setCommuteFilter(commuteFilter).build();
SearchJobsRequest request =
SearchJobsRequest.newBuilder()
.setParent(parent.toString())
.setRequestMetadata(requestMetadata)
.setJobQuery(jobQuery)
.build();
for (SearchJobsResponse.MatchingJob responseItem :
jobServiceClient.searchJobs(request).iterateAll()) {
System.out.format("Job summary: %s%n", responseItem.getJobSummary());
System.out.format("Job title snippet: %s%n", responseItem.getJobTitleSnippet());
Job job = responseItem.getJob();
System.out.format("Job name: %s%n", job.getName());
System.out.format("Job title: %s%n", job.getTitle());
}
}
}
}
Node.js
const talent = require('@google-cloud/talent').v4;
/** Search Jobs using commute distance */
function sampleSearchJobs(projectId, tenantId) {
const client = new talent.JobServiceClient();
// Iterate over all elements.
// const projectId = 'Your Google Cloud Project ID';
// const tenantId = 'Your Tenant ID (using tenancy is optional)';
const formattedParent = client.tenantPath(projectId, tenantId);
const domain = 'www.example.com';
const sessionId = 'Hashed session identifier';
const userId = 'Hashed user identifier';
const requestMetadata = {
domain: domain,
sessionId: sessionId,
userId: userId,
};
const commuteMethod = 'TRANSIT';
const seconds = 1800;
const travelDuration = {
seconds: seconds,
};
const latitude = 37.422408;
const longitude = 122.084068;
const startCoordinates = {
latitude: latitude,
longitude: longitude,
};
const commuteFilter = {
commuteMethod: commuteMethod,
travelDuration: travelDuration,
startCoordinates: startCoordinates,
};
const jobQuery = {
commuteFilter: commuteFilter,
};
const request = {
parent: formattedParent,
requestMetadata: requestMetadata,
jobQuery: jobQuery,
};
client
.searchJobs(request)
.then(responses => {
const resources = responses[0];
for (const resource of resources) {
console.log(`Job summary: ${resource.jobSummary}`);
console.log(`Job title snippet: ${resource.jobTitleSnippet}`);
const job = resource.job;
console.log(`Job name: ${job.name}`);
console.log(`Job title: ${job.title}`);
}
})
.catch(err => {
console.error(err);
});
}
Python
from google.cloud import talent
import six
def search_jobs(project_id, tenant_id):
"""Search Jobs using commute distance"""
client = talent.JobServiceClient()
# project_id = 'Your Google Cloud Project ID'
# tenant_id = 'Your Tenant ID (using tenancy is optional)'
if isinstance(project_id, six.binary_type):
project_id = project_id.decode("utf-8")
if isinstance(tenant_id, six.binary_type):
tenant_id = tenant_id.decode("utf-8")
parent = f"projects/{project_id}/tenants/{tenant_id}"
domain = "www.example.com"
session_id = "Hashed session identifier"
user_id = "Hashed user identifier"
request_metadata = talent.RequestMetadata(
domain=domain,
session_id=session_id,
user_id=user_id
)
commute_method = talent.CommuteMethod.TRANSIT
seconds = 1800
travel_duration = {"seconds": seconds}
latitude = 37.422408
longitude = -122.084068
start_coordinates = {"latitude": latitude, "longitude": longitude}
commute_filter = talent.CommuteFilter(
commute_method=commute_method,
travel_duration=travel_duration,
start_coordinates=start_coordinates,
)
job_query = talent.JobQuery(commute_filter=commute_filter)
# Iterate over all results
results = []
request = talent.SearchJobsRequest(
parent=parent,
request_metadata=request_metadata,
job_query=job_query,
)
for response_item in client.search_jobs(request=request).matching_jobs:
print(f"Job summary: {response_item.job_summary}")
print(f"Job title snippet: {response_item.job_title_snippet}")
job = response_item.job
results.append(job.name)
print(f"Job name: {job.name}")
print(f"Job title: {job.title}")
return results
Ruby
require "google/cloud/talent"
# Instantiate a client
job_service = Google::Cloud::Talent.job_service
# project_id = "Your Google Cloud Project ID"
# tenant_id = "Your Tenant ID (using tenancy is required)"
formatted_parent = job_service.tenant_path project: project_id, tenant: tenant_id
domain = "www.example.com"
session_id = "Hashed session identifier"
user_id = "Hashed user identifier"
request_metadata = {
domain: domain,
session_id: session_id,
user_id: user_id
}
commute_method = :TRANSIT
seconds = 1800
travel_duration = { seconds: seconds }
latitude = 37.422408
longitude = -122.084068
start_coordinates = { latitude: latitude, longitude: longitude }
commute_filter = {
commute_method: commute_method,
travel_duration: travel_duration,
start_coordinates: start_coordinates
}
job_query = { commute_filter: commute_filter }
# Iterate over all results.
response = job_service.search_jobs parent: formatted_parent,
request_metadata: request_metadata,
job_query: job_query
response.matching_jobs.each do |matching_job|
puts "Job summary: #{matching_job.job_summary}"
puts "Job title snippet: #{matching_job.job_title_snippet}"
job = matching_job.job
puts "Job name: #{job.name}"
puts "Job title: #{job.title}"
end