GitHunt
SE

sedenardi/node-ical

ical/ics calendar parsing using nodejs

node-ical

Build Status
NPM version
Downloads

NPM

A minimal icalendar/ics (http://tools.ietf.org/html/rfc5545) parser for nodejs. This modul is a direct fork
of the ical.js module by Peter Braden (https://github.com/peterbraden/ical.js) which is primarily targeted
for allowing to parse icalender/ics files in pure javascript, thus within the browser itself. This node-ical
module, however, primarily targets nodejs use which should allow to parse icalendar/ics files in a more flexible
way.

Install

node-ical is availble on npm:

npm install node-ical

API

Parses a string with ICS content synchronous. This can block the nodejs event loop on big files

var ical = require('node-ical');
ical.parseICS(str);

Parses a string with ICS content asynchronous to prevent event loop from being blocked.

var ical = require('node-ical');
ical.parseICS(str, function(err, data) {
    if (err) console.log(err);
    console.log(data);
});

Parses a string with an ICS File synchronous. This can block the nodejs event loop on big files

var data = ical.parseFile(filename);

Parses a string with an ICS File asynchronous to prevent event loop from being blocked.

var data = ical.parseFile(filename, function(err, data) {
    if (err) console.log(err);
    console.log(data);
});

Reads in the specified iCal file, parses it and returns the parsed data. This method always work asynchronous

ical.fromURL(url, options, function(err, data) {
    if (err) console.log(err);
    console.log(data);
});

Use the request library to fetch the specified URL (opts gets passed on to the request() call), and call the function with the result (either an error or the data).

Example 1 - Print list of upcoming node conferences (see example.js) (parses the file synchronous)

var ical = require('node-ical');
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

ical.fromURL('http://lanyrd.com/topics/nodejs/nodejs.ics', {}, function(err, data) {
  for (var k in data){
    if (data.hasOwnProperty(k)) {
      var ev = data[k];
      console.log("Conference",
        ev.summary,
        'is in',
        ev.location,
        'on the', ev.start.getDate(), 'of', months[ev.start.getMonth()]);
    }
  }
});

Languages

JavaScript100.0%
Apache License 2.0
Created March 1, 2019
Updated May 17, 2020