module VoiceBase::V2::Client
Constants
- BOUNDARY
- MULTIPART_CONTENT_TYPE
Public Class Methods
extended(client, args = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 7 def self.extended(client, args = {}) client.api_host = client.args[:host] || ENV.fetch('VOICEBASE_V2_API_HOST', 'https://apis.voicebase.com') client.api_endpoint = client.args[:api_endpoint] || ENV.fetch('VOICEBASE_V2_API_ENDPOINT', '/v2-beta') end
Public Instance Methods
authenticate!()
click to toggle source
# File lib/voicebase/v2/client.rb, line 12 def authenticate! auth = {:username => @auth_key, :password => @auth_secret} response = VoiceBase::Response.new( self.class.get( uri + '/access/users/admin/tokens', basic_auth: auth, headers: { 'User-Agent' => @user_agent, 'Accept' => 'application/json' } ), api_version) @token = VoiceBase::Client::Token.new(response.tokens.any? && response.tokens.first.fetch("token")) rescue NoMethodError => ex raise VoiceBase::AuthenticationError, response.status_message end
delete_file(args = {}, headers = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 105 def delete_file(args = {}, headers = {}) raise ArgumentError, "Missing argument :media_id" unless args[:media_id] url = uri + "/media/#{args[:media_id]}" response = self.class.delete( url, headers: default_headers(headers) ) VoiceBase::Response.new(response, api_version) end
get_json_transcript(args, headers)
click to toggle source
# File lib/voicebase/v2/client.rb, line 62 def get_json_transcript(args, headers) raise ArgumentError, "Missing argument :media_id" unless args[:media_id] url = uri + "/media/#{args[:media_id]}" response = self.class.get( url, headers: default_headers(headers) ) VoiceBase::Response.new(response, api_version) end
get_media(args = {}, headers = {})
click to toggle source
I presume this method exists for parity with the V1
API however we are not using it
# File lib/voicebase/v2/client.rb, line 42 def get_media(args = {}, headers = {}) raise ArgumentError, "Missing argument :media_id" unless args[:media_id] url = if args[:media_id] uri + "/media/#{args[:media_id]}" elsif args[:external_id] uri + "/media?externalID=#{args[:external_id]}" else raise ArgumentError, "Missing argument :media_url or :media_file" end if args[:external_id] uri + "/media?externalID=#{args[:external_id]}" else raise ArgumentError, "Missing argument :external_id" end VoiceBase::Response.new(self.class.get( url, headers: default_headers(headers) ), api_version) end
get_media_progress(args = {}, headers = {})
click to toggle source
I presume this method exists for parity with the V1
API however we are not using it
# File lib/voicebase/v2/client.rb, line 97 def get_media_progress(args = {}, headers = {}) raise ArgumentError, "Missing argument :media_id" unless args[:media_id] VoiceBase::Response.new(self.class.get( uri + "/media/#{args[:media_id]}/progress", headers: default_headers(headers) ), api_version) end
get_text_transcript(args, headers)
click to toggle source
# File lib/voicebase/v2/client.rb, line 74 def get_text_transcript(args, headers) raise ArgumentError, "Missing argument :media_id" unless args[:media_id] url = uri + "/media/#{args[:media_id]}/transcripts/latest" headers.merge!({ 'Accept' => 'text/plain' }) response = self.class.get( url, headers: default_headers(headers) ) response.parsed_response end
get_transcript(args = {}, headers = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 88 def get_transcript(args = {}, headers = {}) if args[:format] == "txt" get_text_transcript(args, headers) else get_json_transcript(args, headers) end end
upload_media(args = {}, headers = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 28 def upload_media(args = {}, headers = {}) media_url = require_media_file_or_url(args) form_args = form_args(media_url, args[:language]) # language codes: en-US (default), en-UK, en-AU form_args.merge! metadata(args[:external_id]) if args[:external_id] response = self.class.post( uri + '/media', headers: multipart_headers(headers), body: multipart_query(form_args) ) VoiceBase::Response.new(response, api_version) end
Private Instance Methods
blank?(value)
click to toggle source
# File lib/voicebase/v2/client.rb, line 144 def blank?(value) value.nil? || value.empty? end
default_headers(headers = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 148 def default_headers(headers = {}) authenticate! unless token headers = { 'Authorization' => "Bearer #{token.token}", 'User-Agent' => user_agent }.reject { |k, v| blank?(v) }.merge(headers) puts "> headers\n> #{headers}" if debug headers end
form_args(media_url, language = nil)
click to toggle source
# File lib/voicebase/v2/client.rb, line 119 def form_args(media_url, language = nil) args = { 'media' => media_url, 'configuration' => { 'configuration' => { 'executor' => 'v2' } } } args['configuration']['configuration'].merge!({'language' => language}) if language args end
metadata(external_id)
click to toggle source
# File lib/voicebase/v2/client.rb, line 132 def metadata(external_id) { 'metadata' => { 'metadata' => { 'external' => { 'id' => "#{external_id}" } } } } end
multipart_headers(headers = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 158 def multipart_headers(headers = {}) default_headers(headers.merge({'Content-Type' => MULTIPART_CONTENT_TYPE})) end
multipart_query(params)
click to toggle source
# File lib/voicebase/v2/client.rb, line 162 def multipart_query(params) fp = [] params.each do |k, v| if v.respond_to?(:path) and v.respond_to?(:read) then fp.push(FileParam.new(k, v.path, v.read)) elsif v.is_a?(Hash) fp.push(HashParam.new(k, v)) else fp.push(StringParam.new(k, v)) end end query = fp.map {|p| "--" + BOUNDARY + "\r\n" + p.to_multipart }.join("") + "--" + BOUNDARY + "--" puts "> multipart-query\n> #{query}" if debug query end
require_media_file_or_url(args = {})
click to toggle source
# File lib/voicebase/v2/client.rb, line 180 def require_media_file_or_url(args = {}) media = if args[:media_url] args[:media_url] elsif args[:media_file] args[:media_file] else raise ArgumentError, "Missing argument :media_url or :media_file" end end