This provides a Python API for the http://mixcloud.com website.
from mixcloud import Mixcloud
m = Mixcloud()
u = m.user('michelplatiniste')
for c in u.cloudcasts():
print c.name
You must have an application registered with Mixcloud and a corresponding client ID and secret.
Authorization is a multi-step process:
- Generate the authorization URL
- Redirect the user to the URL to authorize your application
- Collect the code query string parameter from the redirect
- Exchange the code for an access token
o = mixcloud.MixcloudOauth(
client_id=client_id, client_secret=client_secret,
redirect_uri=redirect_uri)
url = o.authorize_url()
# Next redirect the user to `url`. They will be redirected to your
# redirect uri with a `code` query string parameter. This must be
# exchanged with Mixcloud for an access token.
access_token = o.exchange_token(code)
# This can then be used for calls that required authorization.
m = mixcloud.Mixcloud(access_token=access_token)
print(m.me())
Optionally you can store an access token in your .netrc file and it will be used automatically. The machine name must be mixcloud-api.
E.g.:
machine mixcloud-api password my_access_token
It is possible to use this module to upload cloudcasts. In order to do that you need to be authenticated. To do that, provide an API token to the constructor.
m = mixcloud.Mixcloud(access_token=access_token)
cc = Cloudcast(...)
with open(mp3_path) as mp3:
r = m.upload(cc, mp3)
It is possible to represent cloudcasts as YAML files. See
example.yml
.
The relevant keys are:
Key | Type |
---|---|
title | String |
desc | String |
tags | List of strings |
tracks | List of tracks |
Each track is a dict with the following keys:
Key | Type |
---|---|
start | Integer |
artist | String |
track | String |
You can leverage YAML syntax for the "start" field: 2:54
will be
parsed directly as 174 (then number of seconds).
It is possible to parse such a file with:
with open(yml_path) as yml:
cc = mixcloud.Cloudcast.from_yml(yml, None)
A mock server is provided for testing purposes in mixcloud.mock
.