refactor(jobs): switch site_type param from string to SiteType enum

pull/4/head
Cullen Watson 2023-07-08 21:36:08 -05:00
parent 3afb9a0735
commit a608042a86
1 changed files with 12 additions and 16 deletions

View File

@ -3,27 +3,23 @@ from fastapi import APIRouter
from api.core.scrapers.indeed import IndeedScraper from api.core.scrapers.indeed import IndeedScraper
from api.core.scrapers.ziprecruiter import ZipRecruiterScraper from api.core.scrapers.ziprecruiter import ZipRecruiterScraper
from api.core.scrapers.linkedin import LinkedInScraper from api.core.scrapers.linkedin import LinkedInScraper
from api.core.scrapers import ScraperInput from api.core.scrapers import ScraperInput, Site
router = APIRouter(prefix="/jobs") router = APIRouter(prefix="/jobs")
SCRAPER_MAPPING = {
Site.LINKEDIN: LinkedInScraper,
Site.INDEED: IndeedScraper,
Site.ZIP_RECRUITER: ZipRecruiterScraper,
}
@router.get("/") @router.get("/")
async def scrape_jobs(site_type: str, search_term: str, location: str, page: int = 1): async def scrape_jobs(site_type: Site, search_term: str, location: str, page: int = 1):
job_response = {"message": "site type not found"} scraper_class = SCRAPER_MAPPING[site_type]
scraper = scraper_class()
scraper_dict = { scraper_input = ScraperInput(search_term=search_term, location=location, page=page)
"indeed": IndeedScraper, job_response = scraper.scrape(scraper_input)
"linkedin": LinkedInScraper,
"zip": ZipRecruiterScraper,
}
scraper_class = scraper_dict.get(site_type)
if scraper_class:
scraper = scraper_class()
scraper_input = ScraperInput(
search_term=search_term, location=location, page=page
)
job_response = scraper.scrape(scraper_input)
return job_response return job_response