Introduction
This blog, we will learn how to communicate with web service in Roku and also we will see how to interact with post and get API call.
The roUrlTransfer BrightScript component used to communicate with remote servers.
Using this component you can make get and post request and read data returned in the HTTP response.
You can make the request either synchronously or asynchronously.
request = CreateObject("roUrlTransfer") request.SetUrl("http://blog.roku.com/developer") html = request.GetToString()
Make a request to an url with parameters:
Function MakeRequest(src As String, params As Object) As Object request = CreateObject("roUrlTransfer") port = CreateObject("roMessagePort") request.setMessagePort(port) url = AppendParamsToUrl(src, params) if url.InStr(0, "https") = 0 request.SetCertificatesFile("common:/certs/ca-bundle.crt") request.AddHeader("X-Roku-Reserved-Dev-Id", "") request.InitClientCertificates() end if ' print url ' uncomment to debug request.SetUrl(url) if request.AsyncGetToString() while true msg = wait(0, port) if type(msg) = "roUrlEvent" code = msg.GetResponseCode() if code = 200 response = ParseJson(msg.GetString()) return response else return invalid end if exit while else if event = invalid request.AsyncCancel() end if end while end if return invalid End Function
Make a request to an URL with parameters POST
Function MakeDeleteRequest(src As String, params As Object) As Boolean request = CreateObject("roUrlTransfer") request.SetRequest("DELETE") port = CreateObject("roMessagePort") request.setMessagePort(port) url = AppendParamsToUrl(src, params) if url.InStr(0, "https") = 0 request.SetCertificatesFile("common:/certs/ca-bundle.crt") request.AddHeader("X-Roku-Reserved-Dev-Id", "") request.InitClientCertificates() end if ' print url ' uncomment to debug request.SetUrl(url) if request.AsyncGetToString() while true msg = wait(0, port) if type(msg) = "roUrlEvent" code = msg.GetResponseCode() if code = 200 or code = 201 or code = 202 or code = 203 or code = 204 print "Success" return true end if exit while else if event = invalid request.AsyncCancel() end if end while end if print "Error" return false End Function
Make a request to an URL with parameters PUT
Function MakePutRequest(src As String, params As Object) As Object request = CreateObject("roUrlTransfer") request.SetRequest("PUT") port = CreateObject("roMessagePort") request.setMessagePort(port) url = AppendParamsToUrl(src, params) print "URL: "; url if url.InStr(0, "https") = 0 request.SetCertificatesFile("common:/certs/ca-bundle.crt") request.AddHeader("X-Roku-Reserved-Dev-Id", "") request.InitClientCertificates() end if ' print url ' uncomment to debug request.SetUrl(url) if request.AsyncGetToString() while true msg = wait(0, port) if type(msg) = "roUrlEvent" code = msg.GetResponseCode() if code = 200 or code = 201 or code = 202 or code = 203 or code = 204 print "Success" response = ParseJson(msg.GetString()) return response 'return true end if exit while else if event = invalid request.AsyncCancel() end if end while end if print "Error" return invalid 'return false End Function
Make a request to an url with parameters POST
Function MakePostRequest(src As String, params As Object) As Object request = CreateObject("roUrlTransfer") port = CreateObject("roMessagePort") request.setMessagePort(port) url = src ' url = AppendParamsToUrl(src, params) bodyData = paramsToString(params) if url.InStr(0, "https") = 0 request.SetCertificatesFile("common:/certs/ca-bundle.crt") request.AddHeader("X-Roku-Reserved-Dev-Id", "") request.InitClientCertificates() end if ' print url ' uncomment to debug request.SetUrl(url) if request.AsyncPostFromString(bodyData) while true msg = wait(0, port) if type(msg) = "roUrlEvent" code = msg.GetResponseCode() if code = 200 or code = 201 response = ParseJson(msg.GetString()) return response end if exit while else if event = invalid request.AsyncCancel() end if end while end if return invalid End Function
Useful functions while make web Request :
function paramsToString(obj as Object) as String result = "" for each i in obj result = result + i + "=" + obj[i] + "&" end for return result end function
Function AppendParamsToUrl(src As String, params As Object) As String url = src args = params request = CreateObject("roUrlTransfer") if args <> invalid and args.count() > 0 for each a in args if url.InStr(0, "?") = -1 separator = "?" else separator = "&" end if url = url + separator + request.escape(a.tostr()) + "=" + request.escape(args[a].tostr()) end for end if return url End Function
Function AppendAppKeyToParams(params As Object) As Object newParams = params appKey = { app_key: GetApiConfigs().app_key } newParams.Append(appKey) return newParams End Function