๐ฒ A powerful Java CLI application that picks random albums from your Discogs collection and tracks your listening history with advanced features.
- ๐ฒ Random Album Selection - Randomly pick albums from your Discogs collection
- ๐ Advanced Filtering - Filter by genre, year, format, artist, or decade
- ๐ Listening History - Track all albums you've listened to with timestamps
- ๐ Statistics Dashboard - View comprehensive stats about your listening habits
- ๐ค Export Options - Export history to CSV, HTML, or Markdown formats
- ๐ซ Duplicate Detection - Automatically detects if you've already listened to an album
- ๐พ Persistent Storage - All history saved in JSON format
- โก Professional Logging - SLF4J + Logback for comprehensive logging
- ๐๏ธ Clean Architecture - Separated into models, services, and configuration layers
- โ Well Tested - Includes JUnit 5 unit tests with high coverage
- ๐ก๏ธ Robust Error Handling - Custom exceptions for better error management
- ๐ Rate Limiting - Automatic retry logic for Discogs API calls
- ๐ Extensive Documentation - JavaDoc comments throughout
- Java 11 or higher
- Maven 3.6 or higher
- Discogs account with API token
-
Clone the repository:
git clone https://github.com/alfdagos/discogs-random-picker.git cd discogs-random-picker -
Create configuration file:
cp config.properties.example config.properties
-
Configure your credentials:
Edit
config.propertiesand add:- Get your API token from: https://www.discogs.com/settings/developers
- Add your Discogs username
- Add your Discogs API token
-
Build the project:
mvn clean package
Pick a random album (no arguments):
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jarOr with Maven:
mvn exec:java -Dexec.mainClass="com.alfdagos.discogsrandompicker.DiscogsRandomPicker"Filter by genre:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --genre RockFilter by specific year:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --year 1980Filter by decade:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --min-year 1970 --max-year 1979Filter by format:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --format VinylFilter by artist:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --artist "Pink Floyd"Combine multiple filters:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --genre Rock --min-year 1970 --max-year 1979 --format VinylView listening statistics:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --statsView listening history:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --historyView last 10 entries:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --history --limit 10Check collection size:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --collection-sizeExport to CSV:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --export csvExport to HTML:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --export html -o myhistory.htmlExport to Markdown:
java -jar target/discogs-random-picker-1.0-SNAPSHOT.jar --export markdown-h, --help Show help message
-v, --version Show version
-s, --stats Show listening statistics
--history Show listening history
--collection-size Show collection size
--limit <NUMBER> Limit number of history entries
-g, --genre <GENRE> Filter by genre
-y, --year <YEAR> Filter by year
-f, --format <FORMAT> Filter by format (Vinyl, CD, etc.)
-a, --artist <ARTIST> Filter by artist name
--min-year <YEAR> Minimum year for range filter
--max-year <YEAR> Maximum year for range filter
-e, --export <FORMAT> Export history (csv, html, markdown)
-o, --output <FILE> Output filename for export
--no-duplicate Skip albums already in history
discogs-random-picker/
โโโ src/
โ โโโ main/
โ โ โโโ java/com/alfdagos/discogsrandompicker/
โ โ โ โโโ DiscogsRandomPicker.java # Main application
โ โ โ โโโ config/
โ โ โ โ โโโ ConfigManager.java # Configuration management
โ โ โ โโโ exception/
โ โ โ โ โโโ ConfigurationException.java
โ โ โ โ โโโ DiscogsApiException.java
โ โ โ โ โโโ HistoryException.java
โ โ โ โโโ model/
โ โ โ โ โโโ Album.java # Album entity
โ โ โ โ โโโ AlbumFilter.java # Filter criteria
โ โ โ โ โโโ ListeningHistoryEntry.java # History entry
โ โ โ โ โโโ Statistics.java # Statistics model
โ โ โ โโโ service/
โ โ โ โโโ DiscogsService.java # Discogs API interaction
โ โ โ โโโ HistoryService.java # History management
โ โ โ โโโ StatisticsService.java # Statistics generation
โ โ โ โโโ ExportService.java # Export functionality
โ โ โโโ resources/
โ โ โโโ logback.xml # Logging configuration
โ โโโ test/
โ โโโ java/com/alfdagos/discogsrandompicker/
โ โโโ model/
โ โ โโโ AlbumTest.java
โ โ โโโ AlbumFilterTest.java
โ โโโ service/
โ โโโ HistoryServiceTest.java
โโโ config.properties.example # Example configuration
โโโ listening_history.json # Listening history (auto-generated)
โโโ pom.xml # Maven configuration
โโโ README.md # This file
Create a config.properties file in the project root:
# Discogs API Configuration
# Get your token from: https://www.discogs.com/settings/developers
discogs.username=your_discogs_username
discogs.token=your_discogs_api_token
# Spotify API Configuration (Optional - for future integration)
spotify.client.id=your_spotify_client_id
spotify.client.secret=your_spotify_client_secretThe statistics feature provides insights like:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LISTENING HISTORY STATISTICS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Total Albums Listened: 142
๐ค Most Listened Artist: Pink Floyd (8 albums)
๐
Most Popular Year: 1977 (12 albums)
๐ฐ๏ธ Most Popular Decade: 1970s (58 albums)
๐ธ Top 5 Artists:
Pink Floyd: 8 albums
The Beatles: 7 albums
Led Zeppelin: 6 albums
David Bowie: 5 albums
Radiohead: 4 albums
๐ Top 5 Years:
1977: 12 albums
1973: 10 albums
1971: 9 albums
1980: 8 albums
1975: 8 albums
Run the test suite:
mvn testRun with coverage:
mvn clean test jacoco:reportLogs are stored in logs/discogs-random-picker.log and rotated daily. Configure logging levels in src/main/resources/logback.xml.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
MIT License
- Discogs API for providing access to music data
- Gson for JSON processing
- Apache Commons CLI for command-line parsing
- SLF4J and Logback for logging
- ๐ง Spotify integration for direct playback
- ๐ Web interface for browsing history
- ๐ฑ REST API for mobile integration
- ๐จ Album cover display in terminal
- ๐ Notifications when new albums are added to collection
- ๐ Advanced analytics and charts
- ๐ฏ Recommendation system based on listening history
- Create shortcuts - Add aliases to your shell for common commands
- Regular exports - Export your history regularly as backup
- Use filters wisely - If a filter returns no results after 50 attempts, try relaxing your criteria
- Check collection size - Use
--collection-sizeto see how many albums you have
Make sure you've created config.properties from the example file and filled in your credentials.
Your Discogs token is invalid. Get a new one from https://www.discogs.com/settings/developers
The application respects Discogs API rate limits. Wait a moment and try again.
If you encounter any issues or have questions:
- Open an issue on GitHub
- Check existing issues for solutions
- Review the logs in
logs/discogs-random-picker.log
Made with โค๏ธ by alfdagos
Version 2.0 - Enhanced Edition