Skip to main content

A modern, async python client for BoardGameGeek.

Project description

🎲 bgg-pi

PyPI version Python Versions Tests Code Style: Ruff License Contributions Welcome

A modern, high-performance asynchronous Python client for BoardGameGeek.

bgg-pi is designed for developers who need reliable, non-blocking access to BoardGameGeek data. Whether you're building a Home Assistant integration, a discord bot, or a data analysis tool, bgg-pi makes it effortless.

✨ Features

  • 🚀 Fully Async: Built on top of aiohttp to keep your applications responsive.
  • ✍️ Record Plays: One of the few libraries that supports logging plays directly to a BGG account.
  • 📦 Collection Management: Fetch user collections with options to filter by ownership, wishlist status, and more.
  • 🎨 Rich Metadata: Retrieve high-fidelity game details including box art, ranks, weight, and play times.
  • 🛡️ Type Safe: Fully typed codebase for excellent IDE autocompletion and error checking.

🚀 Installation

Install via pip:

pip install bgg-pi

🛠️ Quick Start

Fetching User Plays

import asyncio
import aiohttp
from bgg_pi import BggClient

async def main():
    async with aiohttp.ClientSession() as session:
        client = BggClient(session, username="your_username")
        
        # specific api token is optional for public data but recommended
        plays = await client.fetch_plays()
        
        print(f"Found {plays['total']} plays!")
        # Access simple play data
        if plays['last_play']:
             print(f"Last played: {plays['last_play']['game']} on {plays['last_play']['date']}")

if __name__ == "__main__":
    asyncio.run(main())

Logging a Play

Authenticate securely and log your gaming sessions:

async def log_play():
    async with aiohttp.ClientSession() as session:
        # Password is required for play logging
        client = BggClient(session, username="seanmccabe", password="secret_password")
        
        if await client.login():
            success = await client.record_play(
                game_id=13,  # Catan
                date="2026-01-16",
                comments="Great game with friends!",
                length="90",
                players=[
                    {"name": "Sean", "win": True, "score": "10"},
                    {"name": "Friend", "win": False, "score": "8"}
                ]
            )
            
            if success:
                print("Play recorded successfully!")

📚 Documentation

The client covers the most essential BGG XML API2 and GeekPlay endpoints:

  • fetch_plays(): Get logged plays.
  • fetch_collection(): Get a user's board game collection (with filters).
  • fetch_thing_details([ids]): Get detailed metadata for specific games.
  • fetch_game_plays(id): Get play counts for a specific game.
  • record_play(...): Post a new play to BGG.

📦 Projects using bgg-pi

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bgg_pi-0.1.0.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bgg_pi-0.1.0-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file bgg_pi-0.1.0.tar.gz.

File metadata

  • Download URL: bgg_pi-0.1.0.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bgg_pi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 48f02ea20cad4b421a7eef2e727900c9d2033020a5be86418483805b97b95ff2
MD5 00c8af895af292f039948847ec267c32
BLAKE2b-256 c332a039dd1504015280dd5d94e34c7c3d8fc4266b9606d4fd611dbf43d73000

See more details on using hashes here.

Provenance

The following attestation bundles were made for bgg_pi-0.1.0.tar.gz:

Publisher: publish.yaml on seanmccabe/bgg-pi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bgg_pi-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: bgg_pi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bgg_pi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 88cbbcd658b05b98a94a2cb1856e16bb6ac3cabed8088e229215e0d7889e0d6f
MD5 90ac52fb2c0bb3ecba1f2f71decae195
BLAKE2b-256 f8e17b2a2b78f5d1e7cc4f4288598d600b4e0e040ae22db0e67a139eb565f6eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for bgg_pi-0.1.0-py3-none-any.whl:

Publisher: publish.yaml on seanmccabe/bgg-pi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page