Metadata-Version: 2.3
Name: auntie-sounds
Version: 1.0.0b3
Summary: A library for interacting with BBC Radio stations and streams
Requires-Dist: aiohappyeyeballs>=2.6.1
Requires-Dist: aiohttp>=3.12.13
Requires-Dist: aiosignal>=1.4.0
Requires-Dist: attrs>=25.3.0
Requires-Dist: beautifulsoup4>=4.13.4
Requires-Dist: colorlog>=6.9.0
Requires-Dist: frozenlist>=1.7.0
Requires-Dist: idna>=3.10
Requires-Dist: multidict>=6.6.3
Requires-Dist: propcache>=0.3.2
Requires-Dist: soupsieve>=2.7
Requires-Dist: typing-extensions>=4.14.1
Requires-Dist: yarl>=1.20.1
Requires-Python: >=3.11
Description-Content-Type: text/markdown

# Auntie Sounds

A library for interacting with BBC radio stations via an interface to BBC Sounds. It was written to be used for the BBC Sounds provider for [Music Assistant](https://music-assistant.io/) but exists as a standalone library.

## Features

✅ Signing into a BBC Sounds account<br />
✅ Listing current station programming<br />
✅ Obtaining a stream to listen to a station<br />
✅ Getting the current and previous segments (typically songs) on a station

### Not implemented

❌ Pausing or rewinding live radio<br />
❌ Displaying and listening to previous shows

## Notes
- It is written as an async library
- A BBC account is not required for most actions, but as BBC region-locks streams and is turning off non-UK access soon, is it the supported way to use it

## Example Usage

```python
import asyncio
from sounds import exceptions
from sounds.client import SoundsClient

async def main():
    try:
        async with SoundsClient() as client:
            if await client.auth.authenticate(username, password):
                stations = await client.stations.get_stations()
                bbc_6music = await client.stations.get_station("bbc_6music", include_stream=True)
                stream = bbc_6music.stream.uri
                schedule = bbc_6music.schedule
    except exceptions.LoginFailedError:
        ...
    except exceptions.APIResponseError:
        ...
    except exceptions.NetworkError:
        ...

asyncio.run(main())
```