Here be dragons. I manually reverse-engineered an ICS file generated by a program I wrote to figure out the syntax, and then I wrote some PHP to generate a file to that spec.
It's ugly, but it'll work. I even took the time to document what each line/group of lines did. (Except for the lines in the header, but those aren't really important. The first two lines are boilerplate, and the third line just says "the tilderadio schedule made this file".)