pugetive/apple_music_library

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# AppleMusicLibrary

The `apple_music_library` gem offeres a ruby interface to the information stored in an iTunes / Apple Muisic `Library.xml` file, as can be generated with the app's menu option `File > Library > Export Library...`

[![Maintainability](https://api.codeclimate.com/v1/badges/86a57ad0904e4358dd02/maintainability)](https://codeclimate.com/github/pugetive/apple_music_library/maintainability)



## Installation

Add this line to your application's Gemfile:

```ruby
gem 'apple_music_library'
```

And then execute:

    $ bundle install

Or install it yourself as:

    $ gem install apple_music_library

## Usage

```ruby

# Create library
library = AppleMusicLibrary.new('path/to/Library.xml')

# Count albums
puts library.albums.count

# Show playlists contained in a playlist folder
playlist_folder = library.playlist_folder('Folder for Testing')
playlist_folder.playlists.each do |playlist|
  puts playlist.name
end

# List all playlists
library.playlists.each do |playlist|
  puts playlist.name
end

# List only 'smart' playlists
library.playlists(:smart).each do |playlist|
  puts playlist.name
end

# List all regular (not 'smart') playlists
# This filter also excludes apple-created playlists (e.g. the 'Library' and 'Downloaded' playlists)
library.playlists(:regular).each do |playlist|
  puts playlist.name
end


# Show tracks in a specific playlist
playlist = library.playlist('XTC Favorites')
playlist.tracks.each do |track|
  puts track.name
end

# Count tracks by an artist
artist = library.artist('XTC')
puts artist.tracks.count

# List genres associated with the artist
artist.genres.each do |genre|
  puts genre.name
end

# Get favorite tracks by this artist
favorite_tracks = artist.tracks.select{|t| t.loved? || t.star_rating > 3}

# List out the most played artists
library.artists(:most_played).each do |artist|
  puts "#{artist.play_count} :: #{artist.name}"
end

# List out artists with the most tracks
library.artists(:most_tracks).each do |artist|
  puts "#{artist.track_count} :: #{artist.name}"
end

# List out artists with the most albums
library.artists(:most_albums).each do |artist|
  puts "#{artist.album_count} :: #{artist.name}"
end

# Display track counts per genre
library.genres.each do |genre|
  puts "#{genre.track_count} #{genre.name}"
end

# Display track counts per year
library.years.each do |year|
  puts "#{year.track_count} #{year.name}"
end

# Display track counts per decade
library.decades.each do |decade|
  puts "#{decade.track_count} #{decade.name}"
end

# Print a report on all decades in the library
#   e.g.
# 1970-1979 - 336 tracks on 10 albums
# 1980-1989 - 816 tracks on 16 albums
# 1990-1999 - 300 tracks on 8 albums
# 2000-2009 - 110 tracks on 5 albums
library.decades_report


# Print a report on all centuries in the library
# This is a personal edge case for people who, like me, set the year of any classical piece to the year it was written
# rather than the year of hte recording.
# 1800's - 336 tracks on 10 albums
# 1900's - 816 tracks on 16 albums
library.decades_report


```
All stored attributes are available via snake_cased methods on `Track` and `Playlist`. However, note that `#artist`, `#album`, and `#genre` are special cases, returning Ruby objects rather than their associated string values. Methods to return the string versions of these track attributes are provided as `track.artist_name`, `track.album_name`, and `track.genre_name`.

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/pugetive/apple-music-library.

## License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).