The SDK has effectively two interfaces with the developer platform: the API object and the suite of models. The API object is just a small wrapper around network calls that for small one-off interactions with the service. Models are preferrable for larger, more complex options, and are a bit more user-friendly.
Before doing anything, head over to https://developer.beatsmusic.com and apply for a partner key if you don’t one. You’ll want to know both your client id and your client secret (though some calls only need the client id).
After that, you can install this package with pip.
pip install git+https://github.com/Beats-Music/pybeats.git
Any use, modification or distribution of this SDK is subject to the Beats Music API Terms of Use provided at https://developer.beatsmusic.com/tos, and for purposes of these Beats Music API Terms of Use this SDK is a “Beats Music API."
The two “base” classes of the model framework are Base (aptly named)
and Collection. Single resources all extend Base with resource
collections all extend Collection.
Base provides serialization to and from JSON, exposing the JSON
object properties as properties of the class instance. If a resource has
an id (tracks, playlists, users, etc.) they extend the Object class
(which extends Base). All of these classes convert the json id
property to the identifier property on the class instance.
The primary feature of a Collection is that it will convert all
incoming data to their respective models for you. If a collection
supports paging, the PagingCollection will let you access data one
page at a time. Most resource collections are paging collections.
from pybeats.api import BeatsAPI
from pybeats.model import Collection,SearchResult,LoggedInUser
CLIENT_ID = "your-id-here"
CLIENT_SECRET = "your-secret-here"
USERNAME = "your-beats-username"
PASSWORD = "your-beats-password"
# set up your api instance
api = BeatsAPI(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
# some "open calls" you can do now
# searching
search_results = SearchResult.get(api, query='99 Problems', search_type='track')
for result in search_results:
print "{0} - {1} (id: {2})".format(result.display, result.detail, result.identifier)
# featured content
featured = Collection("discoveries/featured")
for feature in featured:
print feature.content.display_string
# calls that require some auth
# login as your user
api.login(USERNAME, PASSWORD)
# getting your account information
my_data = api.get_me()
user_id = my_data['result']['user_context']
my_user = LoggedInUser(id=user_id)
my_user.fetch(api)
print my_user.username
my_playlists = my_user.get_playlists(api)
my_playlists.fetch_next(api)
for playlist in my_playlists:
print "{0} by {1}".format(playlist.display_string, playlist.user.display)
All of the models use the API interface under the covers. However, for some one-off its might be user to use the API interface directly. The following examples are basically a translation of the ones presented above.
from pybeats.api import BeatsAPI
CLIENT_ID = "your-id-here"
CLIENT_SECRET = "your-secret-here"
USERNAME = "your-beats-username"
PASSWORD = "your-beats-password"
# set up your api instance
api = BeatsAPI(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
# some "open calls" you can do now
# searching
search_results = api.get_search_results('99 Problems', 'track')
for result in search_results['data']:
print "{0} - {1} (id: {2})".format(result['display'], result['detail'], result['id'])
# featured content
featured = api.get_featured_content()
for feature in featured['data']:
print feature
# calls that require some auth
# login as your user
api.login(USERNAME, PASSWORD)
# getting your account information
my_data = api.get_me()
user_id = my_data['result']['user_context']
user_data = api.get_user_metadata(user_id)
print user_data['data']['username']
my_playlists = api.get_user_playlists(user_id)
for playlist in my_playlists['data']:
print "{0} by {1}".format(playlist['name], playlist['refs']['user']['display'])