Spaces:
Runtime error
Runtime error
import requests | |
import json | |
from datetime import date, datetime, timedelta | |
import os | |
from ..tool import Tool | |
from typing import Optional, Dict, Union, List | |
def build_tool(config) -> Tool: | |
tool = Tool( | |
"Search job information", | |
"Search job information in Linkin, Glassdoor, etc.", | |
name_for_model="JobSearch", | |
description_for_model="Plugin for look up job information in Linkin, Glassdoor, etc.", | |
logo_url="https://your-app-url.com/.well-known/logo.png", | |
contact_email="[email protected]", | |
legal_info_url="[email protected]", | |
) | |
BASE_URL = "https://jsearch.p.rapidapi.com" | |
KEY = config["subscription_key"] | |
HEADERS = {"X-RapidAPI-Key": KEY, "X-RapidAPI-Host": "zillow-com1.p.rapidapi.com"} | |
def basic_job_search( | |
query: str, | |
page: int = 1, | |
num_pages: str = "1", | |
date_posted: Optional[str] = None, | |
remote_jobs_only: Optional[bool] = None, | |
employment_types: Optional[str] = None, | |
job_requirements: Optional[str] = None, | |
job_titles: Optional[str] = None, | |
company_types: Optional[str] = None, | |
employer: Optional[str] = None, | |
radius: Optional[int] = None, | |
categories: Optional[str] = None, | |
) -> dict: | |
""" | |
Search for jobs posted on job sites across the web. | |
:param query: Free-form jobs search query. | |
:param page: Page to return (each page includes up to 10 results). | |
:param num_pages: Number of pages to return, starting from page. | |
:param date_posted: Find jobs posted within the time you specify. | |
:param remote_jobs_only: Find remote jobs only (work from home). | |
:param employment_types: Find jobs of particular employment types. | |
:param job_requirements: Find jobs with specific requirements. | |
:param job_titles: Find jobs with specific job titles. | |
:param company_types: Find jobs posted by companies of certain types. | |
:param employer: Find jobs posted by specific employers. | |
:param radius: Return jobs within a certain distance from location as specified as part of the query (in km). | |
:param categories: [Deprecated] Find jobs in specific categories/industries. | |
:return: A dictionary with the response from the API. | |
""" | |
querystring = {"query": query, "page": page, "num_pages": num_pages} | |
if date_posted: | |
querystring["date_posted"] = date_posted | |
if remote_jobs_only is not None: | |
querystring["remote_jobs_only"] = remote_jobs_only | |
if employment_types: | |
querystring["employment_types"] = employment_types | |
if job_requirements: | |
querystring["job_requirements"] = job_requirements | |
if job_titles: | |
querystring["job_titles"] = job_titles | |
if company_types: | |
querystring["company_types"] = company_types | |
if employer: | |
querystring["employer"] = employer | |
if radius: | |
querystring["radius"] = radius | |
if categories: | |
querystring["categories"] = categories | |
response = requests.get( | |
BASE_URL + "/search", headers=HEADERS, params=querystring | |
) | |
return response.json() | |
def search_jobs_with_filters( | |
self, | |
query: str, | |
page: int = 1, | |
num_pages: int = 1, | |
date_posted: str = "all", | |
remote_jobs_only: bool = False, | |
employment_types: Optional[str] = None, | |
job_requirements: Optional[str] = None, | |
job_titles: Optional[str] = None, | |
company_types: Optional[str] = None, | |
employer: Optional[str] = None, | |
radius: Optional[int] = None, | |
categories: Optional[str] = None, | |
) -> dict: | |
""" | |
Search for jobs using the JSearch API. | |
Args: | |
query (str): The job search query.Query examples,web development in chicago, marketing manager in new york via linkedin,developer in germany 60306 | |
page (int, optional): The page to return. Defaults to 1. | |
num_pages (int, optional): The number of pages to return. Defaults to 1. | |
date_posted (str, optional): Find jobs posted within the time you specify. Defaults to "all". Find jobs posted within the time you specify.Possible values: all, today, 3days, week,month.Default: all. | |
remote_jobs_only (bool, optional): Find remote jobs only. Defaults to False. | |
employment_types (str, optional): Find jobs of particular employment types. | |
job_requirements (str, optional): Find jobs with specific requirements. | |
job_titles (str, optional): Find jobs with specific job titles. | |
company_types (str, optional): Find jobs posted by companies of certain types. | |
employer (str, optional): Find jobs posted by specific employers. | |
radius (int, optional): Return jobs within a certain distance from location. | |
categories (str, optional): Find jobs in specific categories/industries. | |
Returns: | |
dict: The JSON response from the API. | |
""" | |
params = { | |
"query": query, | |
"page": str(page), | |
"num_pages": str(num_pages), | |
"date_posted": date_posted, | |
"remote_jobs_only": str(remote_jobs_only).lower(), | |
"employment_types": employment_types, | |
"job_requirements": job_requirements, | |
"job_titles": job_titles, | |
"company_types": company_types, | |
"employer": employer, | |
"radius": str(radius) if radius else None, | |
"categories": categories, | |
} | |
# remove None values in the parameters | |
params = {k: v for k, v in params.items() if v is not None} | |
response = requests.get( | |
BASE_URL + "/search-filters", headers=HEADERS, params=params | |
) | |
return response.json() | |
def get_job_details( | |
job_ids: Union[str, List[str]], extended_publisher_details: bool = False | |
) -> dict: | |
""" | |
You can get the job_ids from 'basic_job_search' function | |
Get all job details, including additional application options / links, employer reviews and estimated salaries for similar jobs. | |
:param job_ids: Job Id of the job for which to get details. Batching of up to 20 Job Ids is supported by separating multiple Job Ids by comma (,). | |
Note that each Job Id in a batch request is counted as a request for quota calculation. | |
:param extended_publisher_details: [BETA] Return additional publisher details such as website url and favicon. | |
:return: A dictionary with the response from the API. | |
""" | |
if isinstance(job_ids, list): | |
job_ids = ",".join(job_ids) | |
querystring = { | |
"job_id": job_ids, | |
"extended_publisher_details": str(extended_publisher_details).lower(), | |
} | |
response = requests.get( | |
BASE_URL + "/job-details", headers=HEADERS, params=querystring | |
) | |
return response.json() | |
def get_salary_estimation( | |
job_title: Optional[str] = None, | |
location: Optional[str] = None, | |
radius: int = 200, | |
) -> dict: | |
""" | |
Get estimated salaries for a jobs around a location. | |
:param job_title: Job title for which to get salary estimation. | |
:param location: Location in which to get salary estimation. | |
:param radius: Search radius in km (measured from location). | |
:return: A dictionary with the response from the API. | |
""" | |
querystring = {} | |
if job_title: | |
querystring["job_title"] = job_title | |
if location: | |
querystring["location"] = location | |
if radius: | |
querystring["radius"] = radius | |
response = requests.get( | |
BASE_URL + "/estimated-salary", headers=HEADERS, params=querystring | |
) | |
return response.json() | |
return tool | |