I was able to do this without making my iCloud calendar public. Look around for vdirsyncer. It gives you the ability to log in to iCloud and replicate your calendar locally. Then point your calendar to your local ics file. I have mine refreshing a few times a day. Works like a charm.