Published in
Google, Programming, Web
In order to use some of Google’s features, especially when modifying a user’s data, you must use their authentication scheme. Currently, they only provide an authentication mechanism for desktop/client-side applications. But their site says that a web-based authentication proxy is coming in late April, which is… oh, about now.
Account Authentication for Installed Applications: The ClientLogin API lets you use programmatic login in your desktop or mobile applications. This API incorporates CAPTCHA for greater security against password trollers.
No more Error=BadAuthentication
Published in
Google, Google Calendar, Programming, Technology, Web
There is now a GoogleCalendar API. They also cleaned up their XML. This is very exciting, as to date I was having to parse a lot of the data by hand in the summary field. Of course, “API” is loosely used here, as really they’re just publishing a specification of their feed format.
For example the date is now its own tag:
<gd:when startTime='2006-04-17T15:00:00.000Z'
endTime='2006-04-17T17:00:00.000Z'></gd:when>
And the location is either as simple as a name:
<gd:where valueString='The best pad'></gd:where>
The format specifies possible advanced location encoding via GeoPoints, postal address, primary and alternate locations.
<gd:postalAddress>
22646 Woodward Ave.
Ferndale, MI 48220
</gd:postalAddress>
up to:
<gd:where rel="http://schemas.google.com/g/2005#event"
valueString="Woodward Ave Brewers">
<gd:entryLink href="http://local.example.com/10018/JoesPub">
<id>http://local.example.com/10018/WoodwardAveBrewers</id>
<category scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/g/2005#contact"/>
<content>Good beer</content>
<link href="http://www.woodwardavenuebrewers.com"/>
<gd:contactSection>
<gd:postalAddress> 22646 Woodward Ave., Ferndale,
MI 48220</gd:postalAddress>
<gd:geoPt lat="40.75" lon="-74.0"/>
<gd:phoneNumber>(212) 555-1212</gd:phoneNumber>
<gd:email address="info@woodwardavenuebrewers.com"/>
</gd:contactSection>
</gd:entryLink>
</gd:where>
This makes it much nicer for parsing. The API even allows for adding new events to a calendar.
Update: you have to make sure and grab the full version of the Calendar feed and not the basic
version. The Basic version contains the same old wonkiness. However, the full version is the new yummy XML-ified version. You select this by changing the last tag on the URI.
Basic:
http://www.google.com/calendar/feeds/username@gmail.com/private-magicCookie/basic
vs.
Full:
http://www.google.com/calendar/feeds/username@gmail.com/private-magicCookie/full
Published in
Google, Google Calendar, Programming, Technology
Update: - Google has added a full mode (replace basic in the feed XML url) which provides very nice XML. startDate and endDate are attributes of the gd:when tag. Also, another nice thing was the expansion of recurring events by specifying a window of dates to query. The events are both marked as recurring (and still using iCal recurring format) as well as specifically placed at each recurring event time. This allows devs and users to quickly use the XML feed and provide recurring events without having to deal with that massive hoard of confusing logic (every other Tuesday in April and June except on the 3rd Tuesday of June)
I spent the weekend digging further into the Google Calendar tidbits and putting together a project. There are some odd things about the XML output.
The actual date and time of the event are stored as plain text in the summary node:
When: 2006-05-14 20:30:00 to 2006-05-14 22:30:00
Who: Where: Boston Logan Airport, Boston, MA
Event Status: CONFIRMED
Why didn’t Google use some form of XML, perhaps inspired by the Microformats hCalendar format? This is especially important because as Google demonstrated, it seems to change between using <br> to properly formed <br/> tags (breaking my parsing code).
What is even more puzzling are recurring events:
Recurring Event
First start: 2006-04-18 09:00:00
Duration: 5400
Who: Public,Where: Warren, Michigan
Event Status: CONFIRMED
There is no actual output of the ending date, or type of recurrance the appointment has. iCal specifies it as the following:
DTSTART;TZID=America/New_York:20060418T090000
DURATION:PT5400S
RRULE:FREQ=WEEKLY;BYDAY=TU;UNTIL=20060627T130000Z
which covers all the pertinent information for recreating the output. This is perhaps why the Google Calendar homepage add-in doesn’t yet support recurring events. It’s currently impossible to!
And don’t trying going to http://schemas.google.com/, which is where the schema tag points to.
Lastly, it would be very nice if the If-None-Match request-header was honored for updating the calendar RSS feeds.
Hopefully Google fleshes this out soon.
Published in
Article, Google, Howto, Technology, Web
Let me attempt to redeem my prior remarks about Google Calendar by offering this bit of how to publish your iCal (via iCal or Mozilla Sunbird) to Google. This was inspired by How to subscribe to Google Calendar in iCal.
Create your calendar
You have numerous options for creating your calendar: iCal (Mac), Mozilla Sunbird (Mac, Windows, Linux), Outlook2iCal (Windows), etc.
Setup a public server to host your calendar
You have several options to publish your iCal calendar:
Publish your calendar
Using one of the prescribed methods above, you will then want to actually publish your calendar to the host (or upload via FTP/SSH/SFTP/carrier pigeon on 5.25″ floppy disk). You can turn on “Publish Changes Automatically” to have your changes on your computer automatically uploaded to Google Calendar.
Subscribe to your calendar in Google Calendar
Do the following:
- Manage Calendars
- then under “Other Calendars”, click “Add calendar”
- Fill in the URL of your published calendar - this is probably supplied by the hosting server (like iCal Exchange, .Mac, or you can figure it out for your own server)
- Click “Ok” and wait a little bit for it to be uploaded


Bask in the warming, glowing warmth…
You’re now done and have a Google Calendar version of your local iCal calendar. Unfortunately, at this point, Google Calendar doesn’t let you edit this “public” calendar, though you can add events from this calendar to one of your Google Calendar calendars (if that makes sense, you’re astute). Now you can just publish when you’ll be available to stop at the local pub for a brew!
Published in
Google, Technology, Web
So Google has released their much assumed Calendar. Here is a quick analysis after using it for about 10 minutes (I will play with it more later):
- Feels pretty solid & responsive. GMail has sometimes felt laggy to me, but so far calendar seems to snap and respond well
- Quick and easy adding/viewing/editing of events using the Google Map style popup bubbles
- If you put in the “where” of your location, you can then map to it using GoogleMaps
- Similar color scheme to GMail, so I’m already used to the pastels and they feel… comforting
- Public sharing of calendars, and invitation to events is very nice - but everyone has to be using GMail.
What happened to the iCal invites that both Act! and Outlook and I assume others, support? - Gmail will detect events in email (similar to their ‘Map this’ detection)
- Speaking of interplay,
no import/export of calendar information. Most people already have some calendar going that they may like to bring their current events in from (like importing an address book in GMail). It doesn’t appear that this is available yet, limiting my move to Google Calendar exclusively - this is available under settings and then another tab
No RSS or other feed of my events - so I have to keep coming back to Google Calendar - I just can’t figure out how to find a specific feed to one of my calendars, more digging
Good start - though I’d like a little more open-ness of the data via import/export, RSS, and perhaps a nice little API. Also, interplaying with other calendaring programs (especially desktop ones) is very important. Like syncronizing with my Apple iCal.
Update: bad me, many of the import/export/RSS features are there, I suggest one takes the ‘tour’ (or RTFM) to see the features and where they’re hidden.
Update: oh, and it doesn’t work on the Nokia 770. <thpt!>