|
import gradio as gr |
|
import requests |
|
|
|
|
|
API_KEY = "c1b9b6be0amsh11316ef9a922bdbp1789f5jsn18a0023eef11" |
|
API_HOST = "jsearch.p.rapidapi.com" |
|
|
|
|
|
def get_job_openings(job_title, location, location_type, experience): |
|
url = "https://jsearch.p.rapidapi.com/search" |
|
querystring = { |
|
"query": f"{job_title} in {location}", |
|
"page": "2", |
|
"num_pages": "2", |
|
"remote_jobs_only": "true" if location_type == "REMOTE" else "false", |
|
"employment_types": experience |
|
} |
|
headers = { |
|
"x-rapidapi-key": API_KEY, |
|
"x-rapidapi-host": API_HOST |
|
} |
|
|
|
response = requests.get(url, headers=headers, params=querystring) |
|
|
|
if response.status_code == 200: |
|
data = response.json() |
|
if data and 'data' in data: |
|
jobs = data['data'] |
|
job_cards = "" |
|
|
|
if jobs: |
|
for job in jobs: |
|
job_cards += f""" |
|
<div style="border: 2px solid #ddd; padding: 15px; border-radius: 10px; margin-bottom: 15px; background-color: #f9f9f9;"> |
|
<h3 style="color: #333;">{job.get('job_title', 'No Title')}</h3> |
|
<p style="color: #333;"><strong style="color: #333;">Company:</strong> {job.get('employer_name', 'Unknown')}</p> |
|
<p style="color: #333;"><strong style="color: #333;">Location:</strong> {job.get('job_city', 'Unknown')}, {job.get('job_country', '')}</p> |
|
<p style="color: #333;"><strong style="color: #333;">Type:</strong> {job.get('job_employment_type', 'N/A')}</p> |
|
<p style="color: #333;"><strong style="color: #333;">Posted On:</strong> {job.get('job_posted_at_datetime_utc', 'N/A')}</p> |
|
<p style="color: #333;"><strong style="color: #333;">Deadline:</strong> {job.get('job_offer_expiration_datetime_utc', 'N/A')}</p> |
|
<a href="{job.get('job_apply_link', '#')}" target="_blank" style="color: #007bff; text-decoration: none;">π Apply Now</a> |
|
</div> |
|
""" |
|
return job_cards |
|
else: |
|
return "<p style='color: red;'>β οΈ No job openings found. Try different inputs.</p>" |
|
else: |
|
return "<p style='color: red;'>β οΈ No job data found. Try again.</p>" |
|
else: |
|
return f"<p style='color: red;'>β Error {response.status_code}: {response.text}</p>" |
|
|
|
|
|
with gr.Blocks(theme=gr.themes.Base()) as demo: |
|
gr.Markdown("# π― Career Connect") |
|
gr.Markdown("Find the latest job openings based on your preferences.") |
|
|
|
job_title = gr.Textbox(label="Enter Job Title", placeholder="e.g., Node.js Developer") |
|
location = gr.Textbox(label="Enter Location", placeholder="e.g., New York") |
|
location_type = gr.Dropdown(["ANY", "ON_SITE", "REMOTE", "HYBRID"], label="Location Type") |
|
experience = gr.Dropdown(["FULLTIME", "PARTTIME", "INTERN", "CONTRACTOR"], label="Experience Level") |
|
|
|
submit = gr.Button("π Search Jobs") |
|
result = gr.HTML() |
|
|
|
submit.click(get_job_openings, inputs=[job_title, location, location_type, experience], outputs=result) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|