jobsearch / app.py
PaulMartrenchar's picture
fix & cleanup
ea93bfe
raw
history blame
3.03 kB
import gradio as gr
from datetime import datetime
from typing import List
from JobDescription import JobDescription
from jobspy_indeed import indeed_get_jobs
from WelcomeToTheJungle import wtoj_get_jobs
from jobspy_linkedin import linkedin_get_jobs
from ai_manager import get_extra_information
def html_format_page(jobs : List[JobDescription]):
result = ["<html><head><style>.job{display: flex;width:70%;margin: 5px auto;border: 1px solid;border-radius: 5px;}.logobox{flex: 1;display: flex;align-items: center;justify-content: center;}.logo{width:100px;height:100px}h4{margin: 2px;}</style></head><body>"]
if len(jobs) > 0:
for job in jobs:
if job.ai_result.is_an_internship == False:
result.append(job.to_html())
else:
result.append("No job found")
result.append("</body></html>")
return " ".join(result)
def log_start(raw_search_term, platform):
current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"{current_datetime} - new search: {raw_search_term} on {platform}")
def filterout_jobs(jobs : List[JobDescription]) -> List[JobDescription]:
job_filter = ["marketing", "communication", "community", "business development", "experience", "social media", "brand", "ppc", "seo", "sea", "ads", "user acquisition", "adops", "consultant"]
job_filter_negative = ["stage", "stagiaire", "alternant", "alternance", "intern", "internship", "apprenti"]
selected_jobs : List[JobDescription] = []
for job in jobs:
if not any(item in job.title.lower() for item in job_filter_negative) and any(item in job.title.lower() for item in job_filter):
selected_jobs.append(job)
return selected_jobs
def get_jobs(raw_search_term, platform) -> List[JobDescription]:
search_term = '"' + raw_search_term + '"'
if platform == "Indeed":
return indeed_get_jobs(search_term)
elif platform == "Welcome to the jungle":
return wtoj_get_jobs(search_term)
elif platform == "LinkedIn":
return linkedin_get_jobs(search_term)
else:
raise gr.Error("No platform selected")
def search_jobs(search_term, platform):
log_start(search_term, platform)
jobs : List[JobDescription] = get_jobs(search_term, platform)
selected_jobs = filterout_jobs(jobs)
for job in selected_jobs:
job.ai_result = get_extra_information(job.company, job.job_description)
return html_format_page(jobs)
search_textbox = gr.Radio(choices=["Content writer", "Digital Marketing", "Communication", "Business development", "SEO"], label="Search")
platform = gr.Radio(choices=["Welcome to the jungle", "Indeed", "LinkedIn"], label="Platform")
output_html = gr.HTML(label="Result", value="<html><br/><br/><br/><br/></html>")
demo = gr.Interface(
fn=search_jobs,
inputs=[search_textbox, platform],
outputs=[output_html],
flagging_mode="never",
show_progress="full",
clear_btn=None,
title="Job search",
)
if __name__ == "__main__":
demo.launch()