Function ParseXML(str As String) As dynamic 'Takes in the content feed as a string
if str = invalid return invalid 'if the response is invalid, return invalid
xml = CreateObject("roXMLElement") '
if not xml.Parse(str) return invalid 'If the string cannot be parsed, return invalid
return xml 'returns parsed XML if not invalid
End Function
Function GetContentFeed() 'This function retrieves and parses the feed and stores each content item in a ContentNode
url = CreateObject("roUrlTransfer") 'component used to transfer data to/from remote servers
url.SetUrl("http://griffingatv.website/feed.rss)
rsp = url.GetToString() 'convert response into a string
responseXML = ParseXML(rsp) 'Roku includes it's own XML parsing method
if responseXML<>invalid then 'Fall back in case Roku's built in XML Parse method fails
responseXML = responseXML.GetChildElements() 'Access content inside Feed
responseArray = responseXML.GetChildElements()
End if
'manually parse feed if ParseXML() is invalid
result = [] 'Store all results inside an array. Each element represents a row inside our RowList stored as an Associative Array (line 63)
for each xmlItem in responseArray 'For loop to grab content inside each item in the XML feed
if xmlItem.getName() = "item" 'Each individual channel content is stored inside the XML header named <item>
itemAA = xmlItem.GetChildElements() 'Get the child elements of item
if itemAA <> invalid 'Fall back in case invalid is returned
item = {} 'Creates an Associative Array for each row
for each xmlItem in itemAA 'Goes through all content of itemAA
item[xmlItem.getName()] = xmlItem.getText()
if xmlItem.getName() = "media:content" 'Checks to find <media:content> header
item.stream = {url : xmlItem.url} 'Assigns all content inside <media:content> to the item AA
item.url = xmlItem.getAttributes().url
item.streamFormat = "mp4"
mediaContent = xmlItem.GetChildElements()
for each mediaContentItem in mediaContent 'Looks through MediaContent to find poster images for each piece of content
if mediaContentItem.getName() = "media:thumbnail"
item.HDPosterUrl = mediaContentItem.getattributes().url 'Assigns images to item AA
item.hdBackgroundImageUrl = mediaContentItem.getattributes().url
end if
end for
end if
end for
result.push(item) 'Pushes each AA into the Array
end if
end if
end for
return result ' Returns the array
End Function
Sub Init()
m.top.functionName = "loadContent"
End Sub
Sub loadContent()
list = GetContentFeed()
m.top.content = ParseXMLContent(list)
End Sub
Function ParseXMLContent(list As Object) 'Formats content into content nodes so they can be passed into the RowList
RowItems = createObject("RoSGNode","ContentNode")
'Content node format for RowList: ContentNode(RowList content) --<Children>-> ContentNodes for each row --<Children>-> ContentNodes for each item in the row)
for each rowAA in list
row = createObject("RoSGNode","ContentNode")
row.Title = rowAA.Title
for each itemAA in rowAA.ContentList
item = createObject("RoSGNode","ContentNode")
item.SetFields(itemAA)
row.appendChild(item)
end for
RowItems.appendChild(row)
end for
return RowItems
End Function
url.SetUrl("http://griffingatv.website/feed.rss)
We’re upgrading Roku Community to bring you a faster, more mobile-friendly experience. You may notice limited functionality or read-only access during this time. Read more here.
Planned Downtime:
Community will be unavailable for up to 24–48 hours during the upgrade window during the week of May 19th and you may notice reduced functionality.
In the meantime, for additional assistance, visit our Support Site.
We're sorry for this disruption — we’re excited to share what’s next!