Spaces:
Running
Running
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 | |
from db import Database | |
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) | |
db = Database() | |
db.add_to_db(selected_jobs) | |
return html_format_page(selected_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() |