Sample code for 30+ languages & platforms
PureBasic

VoiceBase -- Upload a Media File with a JSON Configuration

See more VoiceBase Examples

This example uploads a media file and also provides a configuration file.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonArray.pb"
IncludeFile "CkHttpRequest.pb"
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkStringBuilder.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat HTTP API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    ; Insert your Bearer token here:
    accessToken.s = "VOICEBASE_TOKEN"

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    req.i = CkHttpRequest::ckCreate()
    If req.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttpRequest::setCkHttpVerb(req, "POST")
    CkHttpRequest::setCkPath(req, "/v2-beta/media")
    CkHttpRequest::setCkContentType(req, "multipart/form-data")

    ; Add the access (bearer) token to the request, which is a header
    ; having the following format:
    ; Authorization: Bearer <userAccessToken>
    sbAuth.i = CkStringBuilder::ckCreate()
    If sbAuth.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckAppend(sbAuth,"Bearer ")
    CkStringBuilder::ckAppend(sbAuth,accessToken)
    CkHttpRequest::ckAddHeader(req,"Authorization",CkStringBuilder::ckGetAsString(sbAuth))

    success = CkHttpRequest::ckAddFileForUpload2(req,"media","qa_data/wav/msg_123_abc.wav","audio/x-wav")
    If success = 0
        Debug CkHttpRequest::ckLastErrorText(req)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkStringBuilder::ckDispose(sbAuth)
        ProcedureReturn
    EndIf

    ; This is the JSON of the configuration to be added as a parameter to the upload:
    ; (Obviously, if you want a callback, you would use a URL that goes to your own web server..)

    ; 	{ 
    ; 	   "configuration":{ 
    ; 	      "publish":{ 
    ; 	         "callbacks":[
    ; 	            { 
    ; 	               "url":"https://www.chilkatsoft.com/dss/update_vm_transcription.asp",
    ; 	               "method":"POST",
    ; 	               "include":[
    ; 	                  "transcripts",
    ; 	                  "keywords",
    ; 	                  "topics",
    ; 	                  "metadata"
    ; 	               ]
    ; 	            }
    ; 	         ]
    ; 	      },
    ; 	      "keywords":{ 
    ; 	         "groups":[]
    ; 	      }
    ; 	   }
    ; 	}

    ; This code produces the above JSON.
    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateString(json,"configuration.publish.callbacks[0].url","https://www.chilkatsoft.com/dss/update_vm_transcription.asp")
    CkJsonObject::ckUpdateString(json,"configuration.publish.callbacks[0].method","POST")
    CkJsonObject::ckUpdateString(json,"configuration.publish.callbacks[0].include[0]","transcripts")
    CkJsonObject::ckUpdateString(json,"configuration.publish.callbacks[0].include[1]","keywords")
    CkJsonObject::ckUpdateString(json,"configuration.publish.callbacks[0].include[2]","topics")
    CkJsonObject::ckUpdateString(json,"configuration.publish.callbacks[0].include[3]","metadata")

    jConfig.i = CkJsonObject::ckCreate()
    If jConfig.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckObjectOf2(json,"configuration",jConfig)

    jKeywords.i = CkJsonObject::ckCreate()
    If jKeywords.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckAppendObject2(jConfig,"keywords",jKeywords)

    jGroups.i = CkJsonArray::ckCreate()
    If jGroups.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckAppendArray2(jKeywords,"groups",jGroups)

    ; Add the configuration JSON to the upload.
    CkHttpRequest::ckAddParam(req,"configuration",CkJsonObject::ckEmit(json))

    ; Do the upload..
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpSReq(http,"apis.voicebase.com",443,1,req,resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkStringBuilder::ckDispose(sbAuth)
        CkJsonObject::ckDispose(json)
        CkJsonObject::ckDispose(jConfig)
        CkJsonObject::ckDispose(jKeywords)
        CkJsonArray::ckDispose(jGroups)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    ; Examine the response status code and body.
    Debug "Response status code = " + Str(CkHttpResponse::ckStatusCode(resp))

    ; The response should be JSON, even if an error.
    CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp))
    CkJsonObject::setCkEmitCompact(json, 0)

    Debug CkJsonObject::ckEmit(json)

    ; A successful response will have a status code = 200
    If CkHttpResponse::ckStatusCode(resp) <> 200
        Debug "Failed."
    Else
        Debug "mediaId: " + CkJsonObject::ckStringOf(json,"mediaId")
        Debug "href: " + CkJsonObject::ckStringOf(json,"_links.self.href")
        Debug "status: " + CkJsonObject::ckStringOf(json,"status")
        Debug "Success."
    EndIf

    ; Here is an example of a successful response:

    ; 	{ 
    ; 	  "_links": { 
    ; 	    "self": { 
    ; 	      "href": "/v2-beta/media/856a1e85-c847-4c3c-b7a4-6cf15cd51db4"
    ; 	    }
    ; 	  },
    ; 	  "mediaId": "856a1e85-c847-4c3c-b7a4-6cf15cd51db4",
    ; 	  "status": "accepted",
    ; 	  "metadata": {}
    ; 	


    CkHttp::ckDispose(http)
    CkHttpRequest::ckDispose(req)
    CkStringBuilder::ckDispose(sbAuth)
    CkJsonObject::ckDispose(json)
    CkJsonObject::ckDispose(jConfig)
    CkJsonObject::ckDispose(jKeywords)
    CkJsonArray::ckDispose(jGroups)
    CkHttpResponse::ckDispose(resp)


    ProcedureReturn
EndProcedure