如何在Roku中向某个服务器发出API请求

7

我在使用roku和它的特定语言(BasicScript)方面非常新手。我需要向某些服务器发起api调用以获取频道。我不知道如何在roku中实现这一点。请给予建议。

2个回答

10

以下是一种直接的方法,无需依赖于SDK中包含的代码库的语法:

阻塞式方法(程序执行会一直停顿,直到URL被检索):

url="http://myserver.com/anExampleQuery?getmydata&apikey=AX5GZP5LL45D987D0&format=XML"
xfer=createobject("roURLTransfer")
xfer.seturl(url)
data=xfer.gettostring()

非阻塞方法,可以在等待数据的同时做其他事情:

url="http://myserver.com/anExampleQuery?getmydata&apikey=AX5GZP5LL45D987D0&format=XML"
xfer=createobject("roURLTransfer")
xfer.seturl(url)
port=createobject("roMessagePort")
xfer.setport(port)
timer=createobject("roTimeSpan")
timer.mark()
xfer.asyncgettostring()
while true    
    msg=wait(100,port) '100 millisecond pause
    if type(msg)="roUrlEvent" then

        if msg.getresponsecode()=200 then
            data=msg.getstring()
            headers=msg.getresponseheadersarray()
            exit while
        else
            xfer.asynccancel()
        end if
    else
        print "do something useful while we wait for data"   
    end if
    if timer.totalmilliseconds() > 500 then
        ?"timeout exceeded"
        exit while
    end if
end while
print "***************HEADERS******************"
for each header in headers
print header
end for
print "***************DATA*********************"
print data
print "****************************************"

1
我遇到了以下错误 BRIGHTSCRIPT: ERROR: roUrlTransfer: class PLUGIN|MARKUP on thread RENDER: - rkaartikeyan
你好,@alphablender 我需要在xfer.asynccancel()块中显示对话框,但任务节点不支持对话框。是否有任何方法可以显示对话框?我尝试过使用getparent()很多次,但还没有显示出来。 - Nikunj Chaklasiya
@NikunjChaklasiya 最好创建一个新问题,简短的答案是使用观察者来切换由任务节点更新的字段以打开或关闭对话框。 - alphablender

0
http=NewHttp("http://server address")
rsp = http.GetToStringWithRetry()
print rsp 'To check the response text from server

只有在您的SDK中包含URL实用程序文件之一时,才能使其正常工作,例如来自TwitterOauth示例的url.brs。 url.brs是一个库,其中包装了roURLTransfer对象的brightscript函数,这会增加一点执行时间开销。 - alphablender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接