I was working an my channel
' ********** Copyright 2015 Roku Corp. All Rights Reserved. **********
Sub RunUserInterface()
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("HomeScene")
port = CreateObject("roMessagePort")
screen.SetMessagePort(port)
screen.Show()
oneRow = GetApiArray()
list = [
{
TITLE : "First row"
ContentList : oneRow
}
]
scene.gridContent = ParseXMLContent(list)
while true
msg = wait(0, port)
print "------------------"
print "msg = "; msg
end while
if screen <> invalid then
screen.Close()
screen = invalid
end if
End Sub
Function ParseXMLContent(list As Object)
RowItems = createObject("RoSGNode","ContentNode")
for each rowAA in list
'for index = 0 to 1
row = createObject("RoSGNode","ContentNode")
row.Title = rowAA.Title
for each itemAA in rowAA.ContentList
item = createObject("RoSGNode","ContentNode")
' We don't use item.setFields(itemAA) as doesn't cast streamFormat to proper value
for each key in itemAA
item[key] = itemAA[key]
end for
row.appendChild(item)
end for
RowItems.appendChild(row)
end for
return RowItems
End Function
Function GetApiArray()
url = CreateObject("roUrlTransfer")
url.SetUrl("[url=http://griffingatv.website/xml/categories.xml]http://griffingatv.website/xml/categories.xml[/url]")
rsp = url.GetToString()
responseXML = ParseXML(rsp)
responseXML = responseXML.GetChildElements()
responseArray = responseXML.GetChildElements()
result = []
for each xmlItem in responseArray
if xmlItem.getName() = "item"
itemAA = xmlItem.GetChildElements()
if itemAA <> invalid
item = {}
for each xmlItem in itemAA
item[xmlItem.getName()] = xmlItem.getText()
if xmlItem.getName() = "media:content"
item.stream = {url : xmlItem.url}
item.PlayContentWithFullRAFIntegration().url
item.url = xmlItem.getAttributes().url
item.streamFormat = "mp4"
mediaContent = xmlItem.GetChildElements()
for each mediaContentItem in mediaContent
if mediaContentItem.getName() = "media:thumbnail"
item.HDPosterUrl = mediaContentItem.getattributes().url
item.hdBackgroundImageUrl = mediaContentItem.getattributes().url
end if
end for
end if
end for
result.push(item)
end if
end if
end for
return result
End Function
Function ParseXML(str As String) As dynamic
if str = invalid return invalid
xml=CreateObject("roXMLElement")
if not xml.Parse(str) return invalid
return xml
End Function
and I had came across this error
Syntax Error (Compile Error h&02) inpkg: source/main.brs (68)
Well what’s on line 68???
I copied your code and guessing it’s off by a few lines, and it’s really crashing on this line because item is an roArray and you try to use it as an roAssociativeArray
item.stream = {url : xmlItem.url}
item[xmlItem.getName()] = xmlItem.getText() <---- on this line 'item' is an roArray
if xmlItem.getName() = "media:content"
item.stream = {url : xmlItem.url} <----- on this line you try to use it as roAssociativeArray, goes boom
“joetesta” wrote:
item[xmlItem.getName()] = xmlItem.getText() <---- on this line 'item' is an roArray
There’s nothing wrong with that assignment. If xmlItem.getName() returns a String, then item is being used (correctly) as an associative array.
It could be anything. My guess is that this is the problem:
item.PlayContentWithFullRAFIntegration().url
@Blackhawk . If you’re serious about getting other people to do your debugging for you, then the least you could do is cut and paste the debugger output – the WHOLE debugger output, not just a single line from it, and include the debugger listing that shows the LINE NUMBERS of your code.
Looks like you’re correct belltown. Does the response from PlayContentWithFullRAFIntegration() have a url key, is it even an roAA (not according to your (Blackhawk’s) earlier posts)?
Thats what it said according to PuTTY
It looks like a compile error rather than a runtime error, which is why it isn’t giving more information. You should be able to look at the line number in the code that it’s telling you has an error, and figure out what’s wrong.
I had redid the main script to this
********** Copyright 2015 Roku Corp. All Rights Reserved. **********
Library "Roku_Ads.brs"
Sub RunUserInterface()
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("HomeScene")
port = CreateObject("roMessagePort")
screen.SetMessagePort(port)
screen.Show()
oneRow = GetApiArray()
list = [
{
TITLE : GetApiArray.category() ContentList : oneRow
}
]
scene.gridContent = ParseXMLContent(list)
while true
msg = wait(0, port)
print "------------------"
print "msg = "; msg
end while
if screen <> invalid then
screen.Close()
screen = invalid
end if
End Sub
Function ParseXMLContent(list As Object)
RowItems = createObject("RoSGNode","ContentNode")
for each rowAA in list
'for index = 0 to 1
row = createObject("RoSGNode","ContentNode")
row.Title = rowAA.Title
for each itemAA in rowAA.ContentList
item = createObject("RoSGNode","ContentNode")
' We don't use item.setFields(itemAA) as doesn't cast streamFormat to proper value
for each key in itemAA
item[key] = itemAA[key]
end for
row.appendChild(item)
end for
RowItems.appendChild(row)
end for
return RowItems
End Function
Function GetApiArray()
url = CreateObject("roUrlTransfer")
url.SetUrl("[url=http://api.delvenetworks.com/xml/categories.xml]http://api.delvenetworks.com/xml/categories.xml[/url]")
rsp = url.GetToString()
responseXML = ParseXML(rsp)
responseXML = responseXML.GetChildElements()
responseArray = responseXML.GetChildElements()
result = []
for each xmlItem in responseArray
if xmlItem.getName() = "item"
itemAA = xmlItem.GetChildElements()
if itemAA <> invalid
item = {}
for each xmlItem in itemAA
item[xmlItem.getName()] = xmlItem.getText()
if xmlItem.getName() = "media:content"
item.stream = {url : xmlItem.url}
item.url = xmlItem.getAttributes().url
item.streamFormat = "mp4"
mediaContent = xmlItem.GetChildElements()
for each mediaContentItem in mediaContent
if mediaContentItem.getName() = "media:thumbnail"
item.HDPosterUrl = mediaContentItem.getattributes().url
item.hdBackgroundImageUrl = mediaContentItem.getattributes().url
end if
end for
end if
end for
result.push(item)
end if
end if
end for
shouldPlayContent = true
adBreakIndex = 0
while shouldPlayContent
videoMsg = wait(0, mediaContent.GetMessagePort())
if videoMsg.isPlaybackPosition()
curPos = videoMsg.GetIndex()
nextPod = scheduledPods[adBreakIndex]
if curPos > nextPod.renderTime and not nextPod.viewed
contentVideoScreen.Close() ' stop playback of content
mediaContent = RAF.showAds(nextPod) ' render next ad pod
adBreakIndex = adBreakIndex + 1
end if
end if
end while
return result
End Function
Function ParseXML(str As String) As dynamic
if str = invalid return invalid
xml=CreateObject("roXMLElement")
if not xml.Parse(str) return invalid
return xml
End Function
I keep getting Syntax Error (compile error &h02) on 1, 3, 5, 21, 22
PuTTY didnt explain the error. I think 3 or 5 has something to do with TITLE : GetApiArray.category()
Please read again what belltown posted back on April 6:
@Blackhawk. If you’re serious about getting other people to do your debugging for you, then the least you could do is cut and paste the debugger output – the WHOLE debugger output, not just a single line from it, and include the debugger listing that shows the LINE NUMBERS of your code.
Instead, you said “I keep getting Syntax Error (compile error &h02) on 1, 3, 5, 21, 22”. That one line is not the WHOLE debugger output, is it? No one can help you if you keep hiding the debugger output from us.
–Mark
Well, first off your line 1 of that script as you “redid” it - is missing the rem or comment apostrophe at the beginning, so this:
********** Copyright 2015 Roku Corp. All Rights Reserved. **********
Is not executable code. Delete the line, preface it with a "REM " or put the apostrophe back ’ in front of that. Then rezip, reinstall, and try running it again to look at the next line it doesn’t like.