Skip to content

Latest commit

 

History

History
237 lines (162 loc) · 7.95 KB

README.rdoc

File metadata and controls

237 lines (162 loc) · 7.95 KB

Mixcloud

The Mixcloud gem is a ruby wrapper of the Mixcloud.com API. It enables you to create Ruby objects of Mixcloud resources such as Cloudcast, Artist, etc. by providing their API urls.

Furthermore, it provides a Search functionality which returns Mixcloud resources as an array of Ruby objects instead of JSON data. For more info check

This gem has not yet been tested with a Rails app. So it is still pretty much a beta. But feel free to test it, use it, drop me a note if you think something needs to be changed or added, or if something isn’t quite working.

Installation

sudo gem install mixcloud

And then require Mixcloud

require 'mixcloud'

# Examples

makoto = Mixcloud::User.new('http://api.mixcloud.com/makoto')
makoto.cloudcasts_url         # => 'http://api.mixcloud.com/makoto/cloudcasts/'

cinematic_mix = Mixcloud::Cloudcast.new('http://api.mixcloud.com/rico-casazza/cinematic-mix-vol-ii/')
cinematic_mix.tags            # => ["http://api.mixcloud.com/tag/cinematic/?metadata=1",
                                    "http://api.mixcloud.com/tag/dub-chill-out-downtempo/?metadata=1", 
                                    "http://api.mixcloud.com/tag/soundscape/?metadata=1",
                                    "http://api.mixcloud.com/tag/soundtrack/?metadata=1", 
                                    "http://api.mixcloud.com/tag/trip-hop/?metadata=1"]

Usage

Search functionality

The Mixcloud gem provide a search functionality for the following Mixcloud resources: Artist, Cloudcast, User and Tag.

Say if you are looking for an artist named ‘Dorian Concept’:

Mixcloud::Search.find_artist('dorian concept')

It will return an array of Artist objects, all with the words ‘dorian concept’ in their names. Behind the scenes, Mixcloud::Search builds a query string for you, so you don’t have to worry about whitespaces. Same goes for:

Mixcloud::Search.find_cloudcast('some text')
Mixcloud::Search.find_user('some text')
Mixcloud::Search.find_tag('some text')

Create Mixcloud Resources

You can create Ruby objects of the following Mixcloud resources: Artist, Category, Cloudcast, Tag, Track and User. In order to do that, you must provide its API url to the constructor.

What do you mean by API url?

Let’s say you want to make a ruby object of the user Mary Anne Hobbs, and her public profile is on

http://www.mixcloud.com/MaryAnneHobbs/

By API url, I mean replacing the ‘www’ in her URL with ‘api’, so you get

http://api.mixcloud.com/MaryAnneHobbs/

Then in your code:

mary_anne_hobbs = Mixcloud::User.new('http://api.mixcloud.com/MaryAnneHobbs/')

Another note regarding the API url, when you enter the API url in the browser, you will see a bunch of data in JSON. But when you append the API url with ‘?metadata=1’, thus

'http://api.mixcloud.com/MaryAnneHobbs/?metadata=1'

, then you will see.… well, more useful data.

What you need to know is that the Mixcloud gem automatically append ‘?=metadata’ to the url that you provide to the constructor, so you don’t have to do it yourself. But even when you do, you won’t break anything.

Associations

Certain Mixcloud objects have associations, for example, a Cloudcast belongs to a User. In most applications, you can call #user_id to retrieve that user. However, if you look at the Mixcloud API, the identifier is actually an URL. So in this gem, you will call

@cloudcast.user_url

to retrieve the API url of the associated user. It does not return a User object, because I believe that it is a responsibility that belongs to your web-app. However, by providing you the API url, it does make it easier for you to build that object.

There is one exception to that rule! A Cloudcast has many Sections, but if you look at the Mixcloud API, it does not treat Section as a resource and they don’t have unique URLs. In this case, when you call:

@cloudcast.sections

For more information regarding associations, check out the documentation below.

Resources

Most of the methods are named after the JSON data retrieved from the Mixcloud API. Here is a list of classes and their methods.

Artist

Mixcloud::Artist contains the following:

Instance methods:

# To return the API url with the most popular, latest, or the hottest cloudcasts for a specific artist

@artist.popular_url
@artist.new_url
@artist.hot_url

Instance variables (defined at initialization):

@name, @key, @slug, @public_url, @api_url

Category

Mixcloud::Category contains the following:

Instance methods:

@category.small_picture_url
@category.large_picture_url
@category.medium_picture_url
@category.thumbnail_picture_url
@category.medium_mobile_picture_url
@category.userpick_users_url 
@category.userpick_cloudcasts_url
@category.users_url
@category.cloudcasts_url

Instance variables (defined at initialization):

@name, @format, @public_url, @api_url, @key, @slug

Cloudcast

Mixcloud::Cloudcast contains the following:

Instance methods:

@cloudcast.medium_picture_url
@cloudcast.extra_large_picture_url
@cloudcast.large_picture_url
@cloudcast.small_url
@cloudcast.medium_mobile_picture_url
@cloudcast.thumbnail_picture_url
@cloudcast.listeners_url
@cloudcast.similar_url
@cloudcast.favorites_url
@cloudcast.comments_url
@cloudcast.sections
@cloudcast.tag_urls

Instance variables (defined at initialization):

@listener_count, @name, @public_url, @api_url, @description, @updated_time, @play_count, @comment_count, 
@percentage_music, @key, @created_time, @audio_length, @slug, @favorite_count, @user_url

Association: A Cloudcast has many Sections:

@cloudcast.sections    # returns an array of Section objects. See Section for its attributes

A Cloudcast has many Tags:

@cloudcast.tag_urls    # returns an array of api-urls of tags (as string) associated with the cloudcast

A Cloudcast belongs to a User:

@cloudcast.user_url    # returns the api url of the associated user

Tag

Mixcloud::Tag contains the following:

Instance methods:

# To return the API url with the most popular, latest, or the hottest cloudcasts with a specific tag

@tag.popular_url
@tag.new_url
@tag.hot_url

Instance variables (defined at initialization):

@public_url, @api_url, @name, @key

Track

Mixcloud::Track contains the following:

Instance methods: # To return the API url with the most popular, latest, or the hottest cloudcasts featuring a specific track

@track.popular_url
@track.new_url
@track.hot_url

Instance variables (defined at initialization):

@public_url, @api_url, @name, @key, @slug, @artist_url

Associations: A Track belongs to an Artist:

@track.artist_url     # returns the api url of the associated artist

User

Mixcloud::User contains the following:

Instance methods:

@user.medium_picture_url
@user.extra_large_picture_url
@user.large_picture_url
@user.small_url
@user.medium_mobile_picture_url
@user.thumbnail_picture_url
@user.feed_url
@user.playlists_url
@user.comments_url
@user.followers_url
@user.favorites_url
@user.following_url
@user.cloudcasts_url
@user.listens_url

Instance variables (defined at initialization):

@username, @name, @cloudcast_count, @following_count, @public_url, @api_url, @listen_count, @key,
@follower_count, @favorite_count, @updated_time, @created_time, @city, @biog, @country

Mixcloud::Search contains the following:

Class methods:

Mixcloud::Seach.find_artist(string)
Mixcloud::Seach.find_cloudcast(string)
Mixcloud::Seach.find_user(string)
Mixcloud::Seach.find_tag(string)

Section

Mixcloud::Section contains the following:

When you call

@cloudcast.sections

, it creates an array of Sections. Each section has the instance variables defined:

@track_url, @position, @start_time, @section_type

License

Copyright © 2012 Alex Fong. Release under MIT license. See the attached License file.