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
