Go-based Amazon and Audible scraper that displays views in a webui for self-hosting.
2.1K
A Go web application that tracks audiobook series release dates by scraping Audible and Amazon. Features user authentication, database persistence, background scraping, and automatic refresh capabilities with a clean web UI and JSON API.
⚠️ Important Notice: This application collects publicly available data from Audible and Amazon through automated web scraping for personal use only.
Compliance & Usage:
Performance Expectations:
Terms of Service Considerations: Users should review Audible's Terms of Use and Amazon's Conditions of Use to ensure compliance with their personal use case. This tool is designed for personal tracking and does not violate automated access restrictions when used responsibly.
Originally created to replace manual maintenance of an Obsidian "database" for tracking audiobook release dates. Sample config is included to see how the screenshots below were created.
I call it syllabus because it's a list of things to read.
Perfect for homelab deployment with Docker Compose for automated audiobook series tracking.
adminadmin⚠️ Change the default password immediately after first login
YAML schema with optional application settings:
# Application Settings (optional - defaults shown)
settings:
auto_refresh_interval: 6 # Hours between automatic data refreshes (default: 6)
default_workers: 4 # Number of concurrent scraper workers (default: 4)
server_port: 8080 # Port for the web server (default: 8080)
cache_timeout: 6 # Cache timeout in hours (default: 6)
log_level: "info" # Logging level: debug, info, warn, error (default: info)
main_view: "unified" # Default view mode: unified, tabbed (default: unified)
# Audiobook/Ebook Series Configuration
audiobooks:
- title: "1% Lifesteal"
audible: "https://www.audible.com/series/1-Lifesteal-Audiobooks/B0F8QMLV9T"
amazon: "https://www.amazon.com/dp/B0DGWCJ6JP"
- title: "A Soldier's Life"
audible: "https://www.audible.com/series/A-Soldiers-Life-Audiobooks/B0D34549LX"
amazon: "https://www.amazon.com/dp/B0CW18NDBQ"
Required fields: Only title, audible, and amazon are required for scraping.
Settings section: All settings are optional and will use sensible defaults if not specified. The settings section allows you to customize application behavior without modifying code.
For containerized deployments, you can override any setting using environment variables. Environment variables take precedence over YAML configuration:
environment:
# Server Configuration
SYLLABUS_SERVER_PORT: "8080" # Server port (1-65535)
PORT: "8080" # Standard port env var (alternative)
# Scraping Configuration
SYLLABUS_AUTO_REFRESH_INTERVAL: "4" # Hours between auto-refreshes (>0)
SYLLABUS_DEFAULT_WORKERS: "2" # Number of concurrent scraper workers (>0)
SYLLABUS_CACHE_TIMEOUT: "6" # Cache timeout in hours (>0)
# UI Configuration
SYLLABUS_MAIN_VIEW: "unified" # Default view mode: "unified" or "tabbed"
# Logging Configuration
SYLLABUS_LOG_LEVEL: "debug" # Log level: "debug", "info", "warn", "error"
Configuration Priority:
Database Persistence: UI changes (like auto-refresh interval) are saved to the database and survive container restarts. The UI will always show the current server state.
git clone https://github.com/michaeldvinci/syllabus.git
cd syllabus
# Basic deployment
docker compose up -d
# View logs
docker compose logs -f
Customization with Environment Variables:
# Copy example override file
cp docker-compose.override.example.yaml docker-compose.override.yaml
# Edit settings
nano docker-compose.override.yaml
# Deploy with custom settings
docker compose up -d
The override file allows you to customize settings without modifying the main docker-compose.yaml file.
git clone https://github.com/michaeldvinci/syllabus.git
cd syllabus
# Run directly
go run cmd/syllabus/main.go config/books.yaml
# Or build first
go build -o syllabus cmd/syllabus/main.go
./syllabus config/books.yaml
admin / admin (change immediately!)productlistitem occurrences in series page HTMLRelease date: MM-DD-YY from series pagecollection-size element as (N book series)a-color-success a-text-bold span elementsAll API endpoints require authentication via session cookie (login at /login).
Returns an array of series objects with the following fields:
{
"Title": "Series Name",
"AudibleCount": 5,
"AudibleLatestTitle": "Book Title",
"AudibleLatestDate": "2024-01-15T00:00:00Z",
"AudibleNextTitle": "Next Book Title",
"AudibleNextDate": "2024-03-20T00:00:00Z",
"AmazonCount": 5,
"AmazonLatestTitle": "Book Title",
"AmazonLatestDate": "2024-01-15T00:00:00Z",
"AmazonNextTitle": "Next Book Title",
"AmazonNextDate": "2024-03-20T00:00:00Z",
"AudibleID": "B0EXAMPLE",
"AmazonASIN": "B08EXAMPLE",
"Err": null
}
Triggers a manual refresh of all series data.
Returns iCal calendar file with all upcoming release dates.
Updates automatic refresh interval (Admin only).
{"interval": 6}
All dates are returned in ISO 8601 format.
./data/syllabus.db./data/users.jsondocker compose logs syllabusContent type
Image
Digest
sha256:dcbd22350…
Size
78.9 MB
Last updated
7 months ago
docker pull michaeldvinci/syllabus