Creating a tango calendar

Resurrection of

BTF Sunday 086 When I started dancing argentine tango, there were two sites that gave you an update of where and when you could dance tango in Belgium. The first one was, with a frame-based layout that I don’t find the most user-friendly nor visually pleasing, and the second, with a Flash-based agenda that was quite easy to use. Unfortunately the editor of the latter had to stop the site due to lack of time. Two weeks ago I noticed that he had even let the domain name expire and it was free again. Five minutes later I was the new owner of My goal: to make it again into a comprehensive overview of where to take tango courses and dance tango in Belgium.

WordPress again

Oh, what can I say, I know WordPress so well now, I use it wherever I can. So yes, it’s a WordPress site, with the K2 template, but with (currently) only static pages and no posts. I’ve divided the site into 2 parts: where to follow classes, and where to go dancing (practicas, milongas, salons, workshop). I’m obviously going to sprinkle some Web2.0 gold dust on the project. One example of this: Google Calendar.

Tango Calendar 2.0

One of the cornerstones of the site is the agenda/calendar. Most tango instructors keep some kind of agenda on their site (sometimes last updated in 2005), Marisa and Oliver keep an up-to-date agenda for most of Brussels and has an agenda for Flanders and Brussels. All these initiatives are separate, not connected and not always up-to-date. I considered some better alternatives:

SCENARIO 1: every tango teacher/organiser keeps a calendar that supports syndication, let’s say, Google Calendar. They add their own events and I find a way to merge all this data together. This is when I found out there is no library available for merging vCalendar/iCalendar feeds. By the way: have you ever seen that format? It’s like someone explained XML in English to a Frenchman and he asked a German subcontractor to develop it. (Actually, it’s a standard from 1998, so we can forgive the authors for not using XML)

SUMMARY:Bastille Day Party

Some of the tango places do more than just tango and would probably put all these events onto 1 calendar, where I would have to filter out the tango-related stuff. And I would probably need access to all the agendas to correct errors or help them out with tricky issues like ‘how do I make a recurring event’.

SCENARIO 2: Because I wanted the option to only show tango events for Brussels or Antwerp, I though of several regional Google Calendars. I would then still have to figure out a way to merge all events into 1 calendar. But why manage 10 calendars when maybe one single one could do the job?

Let’s say I create one big calendar, where would I put it? Make or buy? ‘Make’ means hosting the calendar myself with a tool like PHPiCalendar, ‘buy’ means hosting it elsewhere (Google Calendar would be the preferred solution, since it’s free and hosted by, well, Google). Google manages the user accounts/passwords for me and already has syndication tools, so that’s what I chose for.

One big calendar where every organiser gets an editor account:
Google Calendar
Embedding the full calendar into the site is easy, since Google has <IFRAME>-based syndication tools built-in. But let’s make it a bit more difficult: filter out the Brussels events, or only the salons (the more upscale/expensive events).

I found a WordPress plugin for iCal feeds: iCal events. It parses the .ICS feed into an XML format, and allows you to print out a list of events (no calendar visualisation). I hacked it a bit to display monthly events better and to allow filtering and now it can take the Google feed, do a search on all events that contain ‘SALON:’ and show only those. But it still shows recurring events as ‘Every Wednesday until June 2007’ instead of expanding that to ‘Wednesday April 25’, ‘Wednesday May 2nd’ …

So I installed PHPiCalendar and found out it can use Google Calendar feeds quite easily. It has the text-based event-list (‘printer -friendly’) format as well as the calendar format, and it expands the recurring events. I can also use it to make customized <IFRAME>-based – or maybe even Javascript-based – syndication tools. So I’ll be diving into that PHP code.

Next step Google Maps!

💬 Google 💬 Tango