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 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)
if search_term == "":
raise gr.Error("No search term selected")
yield "Searching for jobs..."
jobs : List[JobDescription] = get_jobs(search_term, platform)
selected_jobs = filterout_jobs(jobs)
#db = Database()
#db.add_to_db(selected_jobs)
if len(selected_jobs) == 0:
yield "No job found"
return
yield f"Found {len(selected_jobs)}. Analysing..."
result = [""]
for job in selected_jobs:
job.ai_result = get_extra_information(job.company, job.job_description)
if job.ai_result.is_an_internship == False:
result.append(job.to_html())
yield " ".join(result)
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="
")
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()