Skip to main content

Unofficial python API for brain.fm

Project description

The Connection class exposes four operations: login, list_stations, get_token and make_stream_url. Please open an issue if there’s another operation you need.

This client requires Python 3.5+.

CLI Quickstart

$ pip install brainfm
$ brain init
Email: user@gdomain.com
Password: <hidden>
Repeat for confirmation: <hidden>

Add the following to your .profile, .bashrc, or equivalent:

    export BRAINFM_SID="s%3...s0xo"
    export BRAINFM_STREAM_ENDPOINT="https://..."

$ # ... commands to modify and reload profile ...
$ brain play 300

Library Quickstart

pip install brainfm
>>> import brainfm
>>> client = brainfm.Connection()
>>> client.login("your@email.here", "hunter2")
>>> client.list_stations()
[{'name': 'Cinematic Music Focus', 'id': 300,
  'string_id': 'explore.focus.cinematic'},
 {'name': 'Beach Focus', 'id': 53,
  'string_id': 'explore.focus.beach'},
 ...]
>>> token = client.get_token(53)
>>> token
'63f4b59b-93f4-45e6-b0c2-eb6b1582fb96'
>>> client.make_stream_url(token)
'https://stream.brain.fm/?tkn=63f4b59b-93f4-45e6-b0c2-eb6b1582fb96'

Now, open the stream using that token:

https://stream.brain.fm/?tkn=63f4b59b-93f4-45e6-b0c2-eb6b1582fb96

CLI

You must pass an sid with --sid or define an environment variable BRAINFM_SID. You can use brain init to generate one:

$ brain init
Email: user@gdomain.com
Password: <hidden>
Repeat for confirmation: <hidden>

Add the following to your .profile, .bashrc, or equivalent:

    export BRAINFM_SID="s%3...s0xo"
    export BRAINFM_STREAM_ENDPOINT="https://..."

While setting BRAINFM_STREAM_ENDPOINT is not strictly necessary, the cli is faster when either the env var is defined or you provide the endpoint explicitly: brain --stream-endpoint=... ls

Usage:

$ brain ls
+Playable Stations-------------+-----------------------+-------- +
| id  | name                   | string_id             | length  |
+-----+------------------------+-----------------------+-------- +
| 32  | Quick Relax            | relax.justrelax15min  | 15 mins |
| 34  | Relaxed Focus          | explore.relaxed       | 30 mins |
| 35  | Focus                  | focus.3               | 30 mins |
| 36  | Sleep                  | sleep                 | 45 mins |
| ... | ...                    | ...                   | ...     |
| 540 | Study Focus            | explore.focus.study   | 30 mins |
| 541 | LoFi Focus             | explore.focus.lowfi   | 30 mins |
+-----+------------------------+-----------------------+-------- +

$ brain ls -a
+All Stations------------------+-----------------------+-------- +
| id  | name                   | string_id             | length  |
+-----+------------------------+-----------------------+-------- +
| 0   | Favorites              | None                  | None    |
| 32  | Quick Relax            | relax.justrelax15min  | 15 mins |
| 34  | Relaxed Focus          | explore.relaxed       | 30 mins |
| ... | ...                    | ...                   | ...     |
| 46  | Explore                | explore               | None    |
| 47  | Explore Relax          | explore.relax         | None    |
| ... | ...                    | ...                   | ...     |
| 541 | LoFi Focus             | explore.focus.lowfi   | 30 mins |
+-----+------------------------+-----------------------+-------- +

$ brain gt 60
3ff0eab0-a5f6-11e6-a5c2-f11c700a6178

$ brain play 60
# opens a browser at:
#   https://stream.brain.fm/?tkn=3ff0eab0-a5f6-11e6-a5c2-f11c700a6178

Override Endpoints

From the cli you can override the api and stream endpoints with --api-endpoint and --stream-endpoint respectively. This is useful when the service switches endpoints but this library hasn’t been updated to match.

You can also provide these as env variables BRAINFM_API_ENDPOINT and BRAINFM_STREAM_ENDPOINT

User-Agent

By default the user agent is github.com/numberoverzero/brainfm followed by the project __version__. There is also a packaged browser-like user-agent:

>>> client = brainfm.Connection(...)
>>> client.user_agent = brainfm.BROWSER

Instead of filtering, maybe this will be a good metric for customer interest in an official API :heart:

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

brainfm-3.0.0.tar.gz (7.1 kB view hashes)

Uploaded Source

Built Distribution

brainfm-3.0.0-py3-none-any.whl (7.4 kB view hashes)

Uploaded Python 3

Supported by

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