A SOLUTION! For info to those still struggling with this issue, Creighton Paterson and I have created a solution. We provide instructions for an app which will Publish an iCloud sync'd calendar to a web site.
Terminology:
iCal supports both Syncing and Publishing of calendars.
-Syncing is a term restricted to iCloud (formerly MobileMe) calendars, and is the mechanism by which calendar entries are copied between Macs, iPhones, iPads, iPods, and the user's iCloud (MobileMe) site. When wanting to display a calendar on a web site, the web version of the calendar from iCloud is a sufficient solution for some.
-Publishing was possible prior to OSX Lion for both OnMyMac and MobileMe calendars, but as of OSX Lion it is no longer supported for iCloud (formerly MobileMe) calendars. This method was often a preferred method to place a calendar onto a website, but with OSX Lion it is not possible to use it and maintain iCloud syncing to other devices simultaneously.
It is this latter loss of functionality that I have complained about here, and that we now propose a solution for below. I was motivated to this because my wife uses her MacBook to operate a home based aesthetics spa business, and has been both syncing her calendar to her iPod and our iPad, and publishing a version of her calendar to her iWeb designed website to inform customers of potential appointment availability. The loss of this Publish functionality is 'business unfriendly', and would otherwise have forced her to decline to use iCloud (and syncing) in favour of maintaining publishing to her clients via an OnMyMac calendar going forward.
Caution 1: The "Publish" capability prior to OSX Lion operated automatically whenever a change was made to the calendar in question. The solution here is not automatic, and requires two (or one) mouse clicks to operate. Our experience with the Publish capability demonstrated that it was susceptible to failure (generally due to hasty closure of the laptop lid prior to completion of the upload routine), and so this seems an insignificant deficiency to us. The solution provides an app, whose icon can be double clicked (Desktop or Applications folder), or an alias can be placed in the Dock requiring only a single click.
Caution 2: Our intent is only to show available and booked slots on the website. Consequently we set out to create a solution that suppresses any personal client info that might be entered into the iCal event record. Others interested in using it without obscuring some of the calendar data can make minor modifications to achieve this.
Background:
Prior to Lion, Apple saved a single <calname>.ics file for each named iCal calendar, located at some depth within the user's Library folder. It had the name of the particular calendar in question, with the .ics extension, and contained ALL events for that calendar. In OSX Lion, that has changed. Now a directory structure is used (Library/calendars/<xxx>.caldav/<yyy>/…) wherein EACH EVENT is stored in a separate <mmm>.ics file, within an Events directory associated with each named calendar. An associated Info.plist file contains the name of the calendar to which the Events folder is associated. So there is no longer a distinct <calendar>.ics file which can easily be uploaded (ftp) to a web host. There is a <zzz>.ics file for each event. Creating a full calendar file from these event files is required.
Solution:
We have produced and tested a 10 step Mac Automator application which finds the desired event files, concatenates them into a single <calname>.full.ics file using a shell script (by Creighton). The shell script is embedded within one of the Automator actions, and another action ftp's the file to an identified server. The specific Automator actions we have employed, in sequence, are:
1) Show Growl Notification - Using Growl 1.4 ($1.99 from the App Store if you don't already have it) simply for status messages to the user. This step simply tells the user "Assembling Calendar"
2) Run Shell Script - To find and concatenate the individual events into a full <calname>.full.ics file, more below (2).
3) Show Growl Notification - This step tells the user "Uploading Calendar"
4) Get Specified Finder Items - This selects the newly created <calname>.full.ics file.
5) Upload to FTP - This action is not part of the standard Automator install. It can be downloaded from http://editkid.com/upload_to_ftp, and installed. It then requires the specific ftp server address, path, and credentials for the website installation in question, the same info as required for the iCal Publish facility.
6) Get Specified Finder Items - This reselects the newly created <calname>.full.ics file again.
7) Move Finder Item to Trash - cleanup, delete the concatenated file.
8) Get Specified URLs - This defines the website URL in which the calendar is now being displayed. More below (1).
9) Show Growl Notification - This action tells the user "Calendar Uploaded - displaying"
10) Website Popup - This pops up a browser window to the Website in which the calendar is displayed, defined 2 actions previous. This allows verification of the upload. More below (1).
Obviously the Growl Notifications and the Get Specified URLs / Website Popup actions can optionally be deleted if no user feedback is required.
(1) We use phpicalendar within the website to embed the calendar within a frame on one page on the website. Much of the normal info contained within each calendar event record is obscured in the shell script for privacy reasons (e.g. Summary data which includes client name and required service, location, notes, etc). Much of the standard phpicalendar functionalty has also been disabled in order to present a simple weekly view sufficient to inform prospective clients of available and booked time slots. Some of the obscuring is also achieved within phpicalendar modifications. The result can be viewed at http://orangegrovespa.com/Availability_Hrs_Map.html.
(2) The ©CalUpload shell script is the critical piece of this app and is be made available, with free use license to anyone via http://pastebin.com/TkXyezhK. (Download and paste into the Automator Run Shell Script acton.) It contains comments for guidance to other users. Installation specific entries which must be modified by anyone intending to implement this script are at lines 27 (replace "OrangeGroveSpa" with "yourcalendarname"), and lines 102 through 106:
-Remove these lines to expose the event SUMMARY, URL, DESCRIPTION, and LOCATION information.
-Alternatively modify these lines; note that we replace SUMMARY info with "Booked".
-Line 106 deletes text for ANY fields that overflow to a second line, and will do so even if you remove that line from the script.).
The calendar .ics file uploaded will be named yourcalendarname.full.ics.
The ©CalUpload shell script will not be supported beyond the embedded notes and those provided here.