From 75763d612309cef438fd22037f093b4e60afcd51 Mon Sep 17 00:00:00 2001 From: Cullen Watson Date: Mon, 10 Jul 2023 16:14:05 -0500 Subject: [PATCH] feat(jobs): add distance param --- api/core/scrapers/__init__.py | 1 + api/core/scrapers/indeed/__init__.py | 1 + api/core/scrapers/linkedin/__init__.py | 6 +++++- api/core/scrapers/ziprecruiter/__init__.py | 1 + api/v1/jobs/__init__.py | 8 ++++++-- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/api/core/scrapers/__init__.py b/api/core/scrapers/__init__.py index d128403..d4e9546 100644 --- a/api/core/scrapers/__init__.py +++ b/api/core/scrapers/__init__.py @@ -12,6 +12,7 @@ class Site(Enum): class ScraperInput(BaseModel): location: str search_term: str + distance: int = 25 page: int = 1 diff --git a/api/core/scrapers/indeed/__init__.py b/api/core/scrapers/indeed/__init__.py index f89d8a0..b7a6605 100644 --- a/api/core/scrapers/indeed/__init__.py +++ b/api/core/scrapers/indeed/__init__.py @@ -26,6 +26,7 @@ class IndeedScraper(Scraper): "l": scraper_input.location, "filter": 0, "start": 0 if scraper_input.page is None else (scraper_input.page - 1) * 10, + "radius": scraper_input.distance, } response = session.get(self.url, params=params) diff --git a/api/core/scrapers/linkedin/__init__.py b/api/core/scrapers/linkedin/__init__.py index 198b0dc..7ce4f93 100644 --- a/api/core/scrapers/linkedin/__init__.py +++ b/api/core/scrapers/linkedin/__init__.py @@ -16,7 +16,11 @@ class LinkedInScraper(Scraper): self.url = "https://www.linkedin.com/jobs" def scrape(self, scraper_input: ScraperInput) -> JobResponse: - params = {"pageNum": scraper_input.page - 1, "location": scraper_input.location} + params = { + "pageNum": scraper_input.page - 1, + "location": scraper_input.location, + "distance": scraper_input.distance, + } self.url = f"{self.url}/{scraper_input.search_term}-jobs" response = requests.get(self.url, params=params) diff --git a/api/core/scrapers/ziprecruiter/__init__.py b/api/core/scrapers/ziprecruiter/__init__.py index 89fd0ec..3a35747 100644 --- a/api/core/scrapers/ziprecruiter/__init__.py +++ b/api/core/scrapers/ziprecruiter/__init__.py @@ -25,6 +25,7 @@ class ZipRecruiterScraper(Scraper): "search": scraper_input.search_term, "location": scraper_input.location, "page": min(scraper_input.page, 10), + "radius": scraper_input.distance, } response = session.get( diff --git a/api/v1/jobs/__init__.py b/api/v1/jobs/__init__.py index e79c4bf..dba24a0 100644 --- a/api/v1/jobs/__init__.py +++ b/api/v1/jobs/__init__.py @@ -15,11 +15,15 @@ SCRAPER_MAPPING = { @router.get("/") -async def scrape_jobs(site_type: Site, search_term: str, location: str, page: int = 1): +async def scrape_jobs( + site_type: Site, search_term: str, location: str, page: int = 1, distance: int = 25 +): scraper_class = SCRAPER_MAPPING[site_type] scraper = scraper_class() - scraper_input = ScraperInput(search_term=search_term, location=location, page=page) + scraper_input = ScraperInput( + search_term=search_term, location=location, page=page, distance=distance + ) job_response = scraper.scrape(scraper_input) return job_response