How gokuldevp/quotes-fastapi-scraper-llm works
This service exposes health, random-quote, and refresh endpoints. The principal workflow starts at /refresh: documented behavior launches Selenium, logs in, scrapes the first quotes page, formats the result through Gemini, and updates JSON storage and the in-memory cache; /quote/random serves cached data. Startup restores persisted quotes into cache. The README documents the scraper orchestration, but its implementation was not sampled, so those orchestration links reflect documentation rather than inspected calls.
Main entry points: main.py FastAPI app · quote_scraper.py Quote scraper · login_service.py Login service · quotes_page.py Quotes page object
Components 21
API and startup
- FastAPI app
app/main.py - Health endpoint
app/api/health.py - Refresh endpoint
app/api/refresh.py - Random quote endpoint
app/api/quote.py
Scraping workflow
- Quote scraper
app/services/quote_scraper.py - Browser manager
app/services/browser_manager.py - Login service
app/services/login_service.py - Login page object
app/pages/login_page.py - Quotes page object
app/pages/quotes_page.py - Base page object
app/pages/base_page.py - AI formatter
app/services/ai_services.py
Quote state
- JSON storage
app/services/storage_service.py - Quote cache
app/core/cache.py - Quote response model
app/models/quote.py
Configuration and reliability
- Configuration
app/core/config.py - Login exceptions
app/core/exceptions.py - Screenshot capture
app/core/screenshot.py - Logging
app/core/logger.py
Other components
- API client
- Quotes website
- Gemini API
Connections 29
- API client → FastAPI app: sends requests
- FastAPI app → Health endpoint: registers routes
- FastAPI app → Refresh endpoint: registers routes
- FastAPI app → Random quote endpoint: registers routes
- FastAPI app → JSON storage: loads quotes
- FastAPI app → Quote cache: restores quotes
- Refresh endpoint → Quote scraper: runs scrape
- Refresh endpoint → Logging: logs failures
- Quote scraper → Browser manager: manages browser
- Quote scraper → Login service: authenticates
- Quote scraper → Quotes page object: scrapes quotes
- Quote scraper → JSON storage: saves quotes
- Quote scraper → Quote cache: refreshes cache
- Browser manager → Configuration: reads settings
- Browser manager → Quotes website: opens browser
- Login service → Login page object: performs login
- Login service → Configuration: reads credentials
- Login service → Login exceptions: catches errors
- Login service → Screenshot capture: captures failures
- Login service → Logging: logs attempts
- Login page object → Base page object: uses base
- Login page object → Quotes website: submits credentials
- Quotes page object → Base page object: uses base
- Quotes page object → AI formatter: formats extracted data
- Quotes page object → Quotes website: reads quote page
- AI formatter → Configuration: reads prompt settings
- AI formatter → Gemini API: requests formatting
- Random quote endpoint → Quote cache: selects cached quote
- Random quote endpoint → Quote response model: returns response