Atom feeds

I’ve encountered an Atom feed that I’d like to parse and extract the data. I’m familiar with parsing an RSS feed, but haven’t used Atom feeds. If you’ve worked with Atom feeds, I’d appreciate any help you can offer. If you have any sample code showing how you’re parsing a feed would help a lot. I’m assuming it’s similar to parsing an rss 2.0 feed, but there must be differences because so far I haven’t been successful in bringing any data in.

Thanks!
~Mark

Here’s a quickly hacked together parse of the Wikipedia example of an Atom (which I saved to a file named feed.xml)

http://en.wikipedia.org/wiki/Atom_(standard#Example_of_an_Atom_1.0_feed

sub main()
	
	feed=readasciifile("pkg:/feed.xml")
	xml=createobject("roXMLElement")
	obj=createobject("roAssociativeArray")
	if xml.parse(feed) then
		obj.title=xml.title.gettext()
		obj.subtitle=xml.subtitle.gettext()
		obj.links=[]
		for each link in xml.link
			obj.links.push(link.getattributes())
		end for
		obj.id=xml.id.gettext()
		obj.updated=xml.updated.gettext()
		for each element in xml.author.getchildelements()
			obj[element.getname()]=element.gettext()
		end for
		entry=xml.entry
		obj["element"]=[]
		
		for each item in entry.getchildelements()
			arr={}		
			arr[item.getname()]=element.gettext()
			arr[item.getname()+"_attribute"]=item.getattributes()
			obj.element.push(arr)
		end for	
	else
			?"parse failed"
	end if
	stop

end sub

It manages, through a variety of ways, to get (I think) all the attributes into a variable of one sort or another.

One way I didn’t include in this example, if I just wanted the href part of a link, I could have done:

		for each link in xml.link
			obj.links.push(link@href)
		end for

When the code finishes running, print out the variable obj:

some examples:


BrightScript Debugger> print obj

name: John Doe
element: <Component: roArray>
email: johndoe@example.com
subtitle: A subtitle.
updated: 2003-12-13T18:30:02Z
id: urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6
title: Example Feed
links: <Component: roArray>

BrightScript Debugger> print obj.element

<Component: roAssociativeArray>
<Component: roAssociativeArray>
<Component: roAssociativeArray>
<Component: roAssociativeArray>
<Component: roAssociativeArray>
<Component: roAssociativeArray>
<Component: roAssociativeArray>

BrightScript Debugger> ?obj.element[0]

title: johndoe@example.com
title_attribute: <Component: roAssociativeArray>

BrightScript Debugger> ?obj.element[1]

link: johndoe@example.com
link_attribute: <Component: roAssociativeArray>

BrightScript Debugger> ?obj.element[1].link_attribute
href: http://example.org/2003/12/13/atom03

BrightScript Debugger> ?obj.links
http://example.org/feed/
http://example.org/

Thanks again Joel. That looks like a very good example. It’ll give me a good start on trying to parse an atom feed. I appreciate you throwing that together and posting it. I’ll play with it and let you know if I have any questions.

~Mark