Files
fastapi-inventory/README.md
grabowski 877ef951b2 Add .gitignore and secure environment configuration
- Added comprehensive .gitignore to prevent sensitive data commits
- Removed .env from git tracking to protect API tokens
- Created .env.example template for users to copy and configure
- Updated README with secure setup instructions using .env.example
- Prevents accidental exposure of Discogs API tokens and other secrets
2025-08-11 16:21:13 +07:00

4.4 KiB

Media Inventory App

A FastAPI-based web application that allows users to search for different types of media (books, vinyl records, CDs, and cassettes) using external APIs.

Features

  • 📚 Book Search: Search for books using the OpenLibrary API
  • 🎵 Music Search: Search for vinyl records, CDs, and cassettes using the Discogs API
  • 🎨 Clean UI: Bootstrap-based responsive web interface
  • 🔍 Smart Search: Different search parameters based on media type
  • 📱 Mobile Friendly: Responsive design that works on all devices

APIs Used

  • OpenLibrary: For book information and covers
  • Discogs: For music releases and album art

Installation

  1. Clone the repository:

    git clone <repository-url>
    cd fastapi-inventory
    
  2. Install dependencies:

    pip install -r requirements.txt
    
  3. Configure Discogs API (Required for music searches):

    • Go to Discogs Developer Settings
    • Create a new application or use an existing one
    • Generate a User Token
    • Copy the example environment file and add your token:
    # Copy the example file
    cp .env.example .env
    
    # Edit .env file and add your actual token
    DISCOGS_USER_TOKEN=your_actual_discogs_token_here
    DISCOGS_USER_AGENT=YourAppName/1.0 +http://yourwebsite.com
    
  4. Run the application:

    python main.py
    

    Or using uvicorn directly:

    uvicorn main:app --reload --host 0.0.0.0 --port 8000
    
  5. Open your browser and navigate to:

    http://localhost:8000
    

Usage

  1. Select Media Type: Choose from Book, Vinyl Record, CD, or Cassette
  2. Enter Search Query: Type the title, album name, or keywords
  3. Add Artist (Optional): For music searches, you can specify an artist to narrow results
  4. Search: Click the search button to get results
  5. View Details: Click on the external links to view more information on the source websites

Project Structure

fastapi-inventory/
├── main.py                 # FastAPI application
├── requirements.txt        # Python dependencies
├── README.md              # This file
├── templates/             # Jinja2 HTML templates
│   ├── base.html         # Base template
│   ├── index.html        # Search form
│   └── results.html      # Search results
└── static/               # Static files
    └── style.css         # Custom CSS styles

API Endpoints

  • GET /: Main search form
  • POST /search: Process search requests and return results
  • GET /docs: FastAPI automatic API documentation
  • GET /redoc: Alternative API documentation

Dependencies

  • FastAPI: Modern, fast web framework for building APIs
  • Uvicorn: ASGI server for running FastAPI
  • httpx: Async HTTP client for API requests
  • Jinja2: Template engine for HTML rendering
  • python-multipart: For handling form data

External APIs

OpenLibrary API

  • Endpoint: https://openlibrary.org/search.json
  • Usage: Search for books by title, author, or keywords
  • Rate Limits: No authentication required, reasonable rate limits

Discogs API

  • Endpoint: https://api.discogs.com/database/search
  • Usage: Search for music releases by title, artist, or format
  • Rate Limits: No authentication required for basic searches, 60 requests per minute

Features in Detail

  • Searches OpenLibrary for book information
  • Displays title, author, publication year, and ISBN
  • Shows book covers when available
  • Links to OpenLibrary pages for more details
  • Searches Discogs for music releases
  • Supports vinyl, CD, and cassette formats
  • Displays title, artist, year, label, and format information
  • Shows album artwork when available
  • Links to Discogs pages for more details

User Interface

  • Clean, modern design using Bootstrap 5
  • Responsive layout that works on desktop and mobile
  • Dynamic form that shows/hides artist field based on media type
  • Card-based results display with consistent layout
  • Error handling and user feedback

Development

To run in development mode with auto-reload:

uvicorn main:app --reload --host 0.0.0.0 --port 8000

The application will automatically reload when you make changes to the code.

License

This project is open source and available under the MIT License.