Saturday, 28 April 2007

The Importance of Knowing Your Data

I have been developing a custom Google Calendar plugin for a site I am developing and for use in Dot Net Nuke. However for a few hours I have had myself perplexed by the fact that when I was trying to ouput and render the events title, start / end date and location all that was rendered was the title. Initially I though my code was wrong, so I compared it to Thom Shannons PocketGCalSync code, and found that I was doing it right, if only a bit different, I was choosing to loop through the times and locations collections instead of specifying to use just the root. So I was stumped. In work yesterday Chris mentioned if I was sure the data structure was correct. Now at the time I said it was. According to the gData API :

<entry>
 <id>http://www.google.com/calendar/feeds/jo@gmail.com/private-magicCookie/full/entryID</id> 
<published>2006-03-30T22:00:00.000Z</published> 
<updated>2006-03-28T05:47:31.000Z</updated> 
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category> 
<title type='text'>Lunch with Darcy</title> 
<content type='text'>Lunch to discuss future plans.</content> 
<link rel='alternate' type='text/html' href='http://www.google.com/calendar/event?eid=aTJxcnNqbW9tcTJnaTE5cnMybmEwaW04bXMgbWFyY2guam9AZ21haWwuY29t' title='alternate'></link>
 <link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/jo@gmail.com/private-magicCookie/full/entryID'></link> 
<author 
<name>Jo March</name>
 <email>jo@gmail.com</email> 
</author> 
<gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency>
 <gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus> 
<gd:comments>
 <gd:feedLink href='http://www.google.com/calendar/feeds/jo@gmail.com/private-magicCookie/full/entryID/comments/'></gd:feedLink> 
</gd:comments> 
<gd:when startTime='2006-03-30T22:00:00.000Z' endTime='2006-03-30T23:00:00.000Z'></gd:when>
 <gd:where></gd:where> 
</entry>
So I was assuming that the nodes gd:when and gd:where existed in my stream. However this is where I was wrong, what I had failed to spot whas that in the GData API its uses examples showing the basic and full versions of the feed. So i was using my basic feed url not the full one.
Using "basic" returns a basic Atom feed without any extension elements. Using "full" returns a feed that includes all event properties
Stupid I know but now i know, and so do you. So here's to wasting time for not checking the data feed your application is actually using ;) Now this is solved I may be closer to publishing my little addon and see if i can use in in DotNetNuke

2 comments:

David Schultz said...

I'm curious how the Google calendar / DNN integration project is going... any progress?

Michael James said...

sadly due to work commitments no progress as of yet but im hoping to have a good sit down after the bank holiday weekend in the end of May