Option 1. Use default CiviEvent View to build a CiviEvent Calendar
* On your drupal site, navigate to Administer > Site Building > Views
Once enabled, if you would like to customize the view:
Option 2. Integrate CiviEvents iCal feed with Drupal Calendar
This section is taken from a combination of different postings on drupal.org and forum.civicrm.org. These original links are posted below in the more resources area.
2. Decide what content type will be used for nodes imported from your iCal feed. It can be a separate content type for each feed, or they can be combined into other content types. Make sure the content type you select has a date field that can be used for the iCal date, plus fields for any other iCal information that will be imported. If you would like to include the link to register in this node, you will also want to have CCK Link module enabled and installed, and your content type should include a field for this.
3. Decide if you are going to use the 'Feed' content type or create a new one to be the container for your CiviEvent feed. If you create a new one: Create a new content type for iCal feeds. Make sure that "Refresh feed on creation" is unchecked. Under "FeedAPI", check that this is a content type for downloading feeds to your site. Scroll down and under "Parser Common iCal Syndication", check that you want to enable the ical parser for this feed. Under "FeedAPI Node", check the box to enable the feedapi_node processor on this feed and make sure the content type from Step 2 is selected.
4. Go to CiviCRM > Event > Administer Events (civicrm/admin/event) and copy the link location (right click in Firefox) of the gray calendar icon (directly to the left of the GREEN iCAL icon - do not use the green ical icon, it will not work).
5. Go to 'Create Content' and create a new node using the feed content type from step 3. When you create the node, you will find a place to input the url of the feed from step 4 and make sure the content type from Step 2 is selected in the node options.
6. Save the node. Once the feed node has been created, you will see a tab at the top where you can 'map' its data to the fields in your target content type. Click 'map' (If you don't see a 'map' tab, you need to apply proper permissions for the FeedAPI mapper module at Administer > Users > Permissions).
7. Scroll way down and look for 'options->VEVENT:' and map it to 'field_** (date*): iCal VEVENT' (the date field in your feed item content type). **Do NOT map any other options->VEVENT fields* You may map non-VEVENT fields to other fields in the target node. However, if you did in fact create a cck link field in your event content type from step 2, then you can also map 'options->VEVENT->URL' to the cck link field.
8. Save. Once mapped, you can click on the 'Refresh' tab to add in the new feed items.
9. You can check the Content screen in the administration area to see that the nodes have been imported.
10. Now, if your interested, you can use Views to setup a calendar view of all the items from your feed. It's probably easiest to simply clone the default calendar view. You can do this in the Views UI.
11. When you are editing the view, make sure you include at least the 'from date' field of your CiviEvent content type from step 2. Then, under arguments, click the date argument and change the date field (scroll down on the view page if you don't see the fields) to 'Content: your_date_field_from_step_2 - From Date'
12. Make sure you change the path/url of the view under the page display so that it's not the same as teh default calendar view. Update and save the view.
13. Check out your view...you should see the CiviEvents populating! Now you can go back to the view and customize fields, content types, etc, however you please.