class Deezify::Exporter

Public Class Methods

new() click to toggle source
# File lib/deezify/exporter.rb, line 3
def initialize
  @spotify = Deezify::API::Spotify.new
  @deezer = Deezify::API::Deezer.new
end

Public Instance Methods

export_playlist(user_id, playlist_id) click to toggle source
# File lib/deezify/exporter.rb, line 8
def export_playlist(user_id, playlist_id)
  playlist = @spotify.playlist user_id, playlist_id

  puts "Starting to export: #{playlist.name}"

  tracks = get_tracks playlist
  create_playlist playlist.name, tracks

  puts "Successfully added #{tracks.size} tracks"

  # @TODO: export more than 100 tracks
  # @TODO: add progress bar
  # @TODO: check playlist existence and recreate it

  # @FIXME: sometimes finds wrong tracks or doesn't find track at all
end
get_tracks(playlist) click to toggle source
# File lib/deezify/exporter.rb, line 25
def get_tracks(playlist)
  playlist.tracks(limit: 100).map { |track|
    track = find_track(track)
    track[:id] unless track.nil?
  }.reject(&:nil?)
end

Private Instance Methods

create_playlist(name, tracks) click to toggle source
# File lib/deezify/exporter.rb, line 44
def create_playlist(name, tracks)
  playlist = @deezer.create_playlist "#{name} on Spotify"
  @deezer.add_tracks playlist[:id], tracks
end
find_track(track) click to toggle source
# File lib/deezify/exporter.rb, line 32
def find_track(track)
  search_params = {
      artist: track.artists.map(&:name).join(' '),
      name: track.name,
      album: track.album.name
  }

  tracks = @deezer.search search_params.values.join ' '

  tracks.first unless tracks.empty?
end