A Spring Boot application that provides REST endpoints for searching and exporting job listings from various sources.
- Search for jobs using keywords
- Multiple job source providers (Jooble API, fallback providers)
- Download job listings as Excel files
- Health check endpoint for monitoring
- Web interface for basic interaction
- Java 17 or higher
- Maven 3.6 or higher
- Chrome browser (for Selenium-based fallback scraper)
- Clone the repository
- Configure API keys in
src/main/resources/application.properties:
jooble.api.key=YOUR_JOOBLE_API_KEY
jsearch.api.key=YOUR_JSEARCH_API_KEY
serpapi.api.key=YOUR_SERPAPI_KEY
adzuna.app.id=YOUR_ADZUNA_APP_ID
adzuna.app.key=YOUR_ADZUNA_APP_KEY- Build the application with Maven:
mvn clean package- Run the application:
java -jar target/linkedin-job-finder-0.0.1-SNAPSHOT.jarGET /api/jobs/search?keywords={keywords}&limit={limit}
Parameters:
keywords: Job search keywords (required)limit: Maximum number of results to return (optional, default: 20)
Example response:
{
"jobs": [
{
"title": "Software Engineer",
"company": "Google",
"location": "Mountain View, CA",
"jobUrl": "https://example.com/job/123",
"postedDate": "2 days ago",
"salary": "$120,000 - $150,000",
"jobType": "Full-time",
"description": "We are looking for a Software Engineer to join our team...",
"source": "Jooble"
}
],
"count": 1,
"keywords": "software engineer",
"executionTimeMs": 1234
}GET /api/download/excel?keywords={keywords}&limit={limit}
Parameters:
keywords: Job search keywords (required)limit: Maximum number of results to include (optional, default: 100)
Returns: Excel file as a downloadable attachment
GET /api/health
Example response:
{
"status": "UP",
"message": "Job search API is running",
"primaryImplementation": "JoobleApiJobScraperService",
"fallbackImplementation": "FallbackScraperService",
"timestamp": 1672531200000
}The application uses a primary job scraper service that interfaces with the Jooble API. If this fails or returns no results, it falls back to other job sources:
- JoobleApiJobScraperService (Primary) - Uses the Jooble API, which requires registration
- FallbackScraperService - Provides mock data when external APIs are unavailable
- ArbeitnowApiJobScraperService - Uses the Arbeitnow API (no authentication required)
- ApiBasedJobScraperService - Uses multiple public APIs (JSearch, SerpApi, Adzuna)
- LinkedInScraperServiceImpl_OLD - Legacy implementation using Selenium (kept for compatibility)
- Jooble API: Register at https://jooble.org/api/about
- JSearch API: Get a free key at RapidAPI
- SerpAPI: Get a key at https://serpapi.com
- Adzuna API: Register at https://developer.adzuna.com
This project is licensed under the MIT License - see the LICENSE file for details.