Event Integration: Format of iCal, RSS and ATOM feeds

As a Campus Cloud administrator, you may be asked to troubleshoot integrated calendar feeds, such as by following the steps in this FAQ:

Integrated feeds must be in the correct format to appear in the campus app. There are specific formats for (1) RSS feeds, (2) ATOM feeds, and (3) iCal feeds.

1. RSS

<?​xml version=​"1.0"​ encoding=​"UTF-8"​?> <​rss​​xmlns:atom​=​"http://www.w3.org/2005/Atom"xmlns:content​=​"http://purl.org/rss/1.0/modules/content/"​​version​=​"2.0"​> <​channel​> <​title​>Test Feed</​title​> <​link​>http://example.com/test.atom</​link​> <​description​>feed description</​description​> <​atom:link​​href​=​"http://example.com/test.atom"​​rel​=​"self"​ /> <​lastBuildDate​>Tue, 16 Apr 2019 14:45:15 +0000</​lastBuildDate​> <​item​> <​title​>Title</​title​> <​description​>Description</​description​> <​guid​>65c96b7f-a410-4494-b840-d5b82a5d2907</​guid​> <​pubDate​>Tue, 16 Apr 2019 10:45:15 +0000</​pubDate​> <​endDate​>Tue, 16 Apr 2019 11:45:15 +0000</​endDate​> <image> <url>https://www.w3schools.com/images/logo.gif</url> </image> </​item​> ... </​channel​> </​rss​>

Each <item> tag in the feed must contain the following:

  • <title> string

  • <description> string

  • <guid> string | number. Can be replaced by <id>

  • <pubDate> datetime. Can be replaced by <start_date>, <startDate>, <start>, <startdate>, <pubdate>, <published>

  • <endDate> datetime (optional)

  • <image> (optional)

If more than one of the <pubDate> tags is present, we use the first and ignore the others.

If no <endDate> is provided, the default value is 3 hours from <pubDate>.

Image is set in this priority:

  1. If there is a url in the <image>, we set that as the Event image.

  2. If not, we look for <enclosure url="http://example.com/file.jpg" length="123456789" type="jpg" />

  3. If not, we look for any paths for images (in an <a> or <img> tag) within the description field, and set the first one we find as the Event image

  4. If not, we apply our own default image logic to match on the most appropriate icon (based on keyword analysis of title/description, or date, or generic fall-back)

Note: Please make sure that the GUID key is unique for each event. The GUID key is a combination of the event host, feed URL, and GUID.

2. ATOM

<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> <id>2fff5f8a-39b9-4d7b-b102-28d53b28e0a2</id> <title>Test Feed</title> <updated>2019-04-16T14:45:15.475012+00:00</updated> <link href="http://example.com" rel="alternate"/> <link href="http://example.com/test.atom" rel="self"/> <subtitle>feed description</subtitle> <entry> <title>Title</title> <content>Description</content> <id>65c96b7f-a410-4494-b840-d5b82a5d2907</id> <published>Tue, 16 Apr 2019 10:45:15 +0000</published> <endDate>Tue, 16 Apr 2019 11:45:15 +0000</endDate> <image> <url>https://www.w3schools.com/images/logo.gif</url> </image> </entry> </feed>

Each ​<​entry​>​ tag in the feed must contain the following:

  • <title> string

  • ​<​content​>​ string

  • <​id​>​ string | number. Can be replaced by <​guide​>

  • <​published​>​ datetime. Can be replaced by <​start_date​>, <​startDate​>, <​start​>, <startdate>,<​pubdate​>, <​published​>

  • <endDate> datetime (optional) 

  • <image> (optional)

If more than one of the <pubDate> tags is present, we use the first and ignore the others.

If no <endDate> is provided, the default value is 3 hours from <pubDate>.

Image is set in this priority:

  1. If there is a url in the <image>, we set that as the Event image.

  2. If not, we look for <enclosure url="http://example.com/file.jpg" length="123456789" type="jpg" />

  3. If not, we look for any paths for images (in an <a> or <img> tag) within the description field, and set the first one we find as the Event image

  4. If not, we apply our own default image logic to match on the most appropriate icon (based on keyword analysis of title/description, or date, or generic fall-back)

3. iCal

BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT DTSTART:20180128T003000Z DURATION:PT3H SUMMARY:Summary DESCRIPTION:Description UID:id IMAGE;VALUE=URI;DISPLAY=BADGE;FMTTYPE=image/png:http://example.com/images/party.png END:VEVENT ...

We strongly recommend following the RFC 2445 specification to format the feed.

Each <BEGIN:VEVENT> tag in the feed must contain the following: