class PodcastApi::Client

Attributes

base_url[R]

Public Class Methods

new(api_key: nil, user_agent: nil) click to toggle source
# File lib/podcast_api.rb, line 19
def initialize(api_key: nil, user_agent: nil)
    @api_key = api_key
    @base_url = api_key ? @@BASE_URL_PROD : @@BASE_URL_TEST
    @headers = {
        'X-ListenAPI-Key' => @api_key ? @api_key : '',
        'User-Agent' => user_agent ? user_agent : "podcasts-api-ruby #{VERSION}"
    }
end

Public Instance Methods

batch_fetch_episodes(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 83
def batch_fetch_episodes(**kwargs)
    @headers['Content-Type'] = 'application/x-www-form-urlencoded'            
    return send_http_request('post', "#{@base_url}/episodes", {body: kwargs, headers: @headers})
end
batch_fetch_podcasts(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 78
def batch_fetch_podcasts(**kwargs)
    @headers['Content-Type'] = 'application/x-www-form-urlencoded'            
    return send_http_request('post', "#{@base_url}/podcasts", {body: kwargs, headers: @headers})
end
delete_podcast(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 137
def delete_podcast(**kwargs)
    id = kwargs.delete(:id)            
    return send_http_request('delete', "#{@base_url}/podcasts/#{id}", {query: kwargs, headers: @headers})
end
fetch_best_podcasts(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 64
def fetch_best_podcasts(**kwargs)
    return send_http_request('get', "#{@base_url}/best_podcasts", {query: kwargs, headers: @headers})
end
fetch_curated_podcasts_list_by_id(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 88
def fetch_curated_podcasts_list_by_id(**kwargs)
    id = kwargs.delete(:id)            
    return send_http_request('get', "#{@base_url}/curated_podcasts/#{id}", {query: kwargs, headers: @headers})
end
fetch_curated_podcasts_lists(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 93
def fetch_curated_podcasts_lists(**kwargs)
    return send_http_request('get', "#{@base_url}/curated_podcasts", {query: kwargs, headers: @headers})
end
fetch_episode_by_id(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 73
def fetch_episode_by_id(**kwargs)
    id = kwargs.delete(:id)
    return send_http_request('get', "#{@base_url}/episodes/#{id}", {query: kwargs, headers: @headers})
end
fetch_my_playlists(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 128
def fetch_my_playlists(**kwargs)
    return send_http_request('get', "#{@base_url}/playlists", {query: kwargs, headers: @headers})
end
fetch_playlist_by_id(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 123
def fetch_playlist_by_id(**kwargs)
    id = kwargs.delete(:id)            
    return send_http_request('get', "#{@base_url}/playlists/#{id}", {query: kwargs, headers: @headers})
end
fetch_podcast_by_id(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 68
def fetch_podcast_by_id(**kwargs)
    id = kwargs.delete(:id)
    return send_http_request('get', "#{@base_url}/podcasts/#{id}", {query: kwargs, headers: @headers})
end
fetch_podcast_genres(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 97
def fetch_podcast_genres(**kwargs)
    return send_http_request('get', "#{@base_url}/genres", {query: kwargs, headers: @headers})
end
fetch_podcast_languages(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 105
def fetch_podcast_languages(**kwargs)
    return send_http_request('get', "#{@base_url}/languages", {query: kwargs, headers: @headers})
end
fetch_podcast_regions(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 101
def fetch_podcast_regions(**kwargs)
    return send_http_request('get', "#{@base_url}/regions", {query: kwargs, headers: @headers})
end
fetch_recommendations_for_episode(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 118
def fetch_recommendations_for_episode(**kwargs)
    id = kwargs.delete(:id)            
    return send_http_request('get', "#{@base_url}/episodes/#{id}/recommendations", {query: kwargs, headers: @headers})
end
fetch_recommendations_for_podcast(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 113
def fetch_recommendations_for_podcast(**kwargs)
    id = kwargs.delete(:id)            
    return send_http_request('get', "#{@base_url}/podcasts/#{id}/recommendations", {query: kwargs, headers: @headers})
end
just_listen(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 109
def just_listen(**kwargs)
    return send_http_request('get', "#{@base_url}/just_listen", {query: kwargs, headers: @headers})
end
submit_podcast(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 132
def submit_podcast(**kwargs)
    @headers['Content-Type'] = 'application/x-www-form-urlencoded'            
    return send_http_request('post', "#{@base_url}/podcasts/submit", {body: kwargs, headers: @headers})
end
typeahead(**kwargs) click to toggle source
# File lib/podcast_api.rb, line 60
def typeahead(**kwargs)
    return send_http_request('get', "#{@base_url}/typeahead", {query: kwargs, headers: @headers})
end

Protected Instance Methods

get_response(response:) click to toggle source
# File lib/podcast_api.rb, line 29
def get_response(response:)
    if response.code == 200
        return response
    elsif response.code == 400
        raise InvalidRequestError.new 'something wrong on your end (client side errors), e.g., missing required parameters'
    elsif response.code == 401
        raise AuthenticationError.new 'wrong api key or your account is suspended'
    elsif response.code == 404
        raise NotFoundError.new 'endpoint not exist, or podcast / episode not exist'
    elsif response.code == 429
        raise RateLimitError.new 'you are using FREE plan and you exceed the quota limit'
    else
        raise PodcastApiError.new 'something wrong on our end (unexpected server errors)'
    end
end
send_http_request(http_method, *args) click to toggle source
# File lib/podcast_api.rb, line 45
def send_http_request(http_method, *args)
    begin
        response = HTTParty.public_send(http_method, *args)
    rescue SocketError
        raise APIConnectionError.new 'Failed to connect to Listen API servers'
    else
        return get_response(response: response)
    end
end