An open API service indexing awesome lists of open source software.

https://github.com/peerigon/scrapegoat

Fetches calendar/event objects from a CalDav server
https://github.com/peerigon/scrapegoat

Last synced: 8 months ago
JSON representation

Fetches calendar/event objects from a CalDav server

Awesome Lists containing this project

README

          

# scrapegoat

[![Build Status](https://travis-ci.com/peerigon/scrapegoat.svg?branch=master)](https://travis-ci.com/peerigon/scrapegoat)
[![Dependency Status](https://david-dm.org/peerigon/scrapegoat.svg)](https://david-dm.org/peerigon/scrapegoat)

This library requests a calendar object and its events provided by a CalDav server.

Specify basic configuration:

```javascript
config = {
auth: {
user: "username",
pass: "password"
},
// example using baikal as CalDAV server
uri: "http://example.com/cal.php/calendars//"
};
```

The request will timeout if it gets no reponse from the CalDav server after 10 seconds.
An optional `timeout` parameter can be provided to override this default by passing an integer containing the number of milliseconds to wait for the server to send the response before aborting the request.

```javascript
config = {
auth: {
user: "username",
pass: "password"
},
uri: "http://example.com/cal.php/calendars//",
timeout: 20000
};
```

## API

### scrapegoat.getCtag()

Fetches the ctag of a calendar. You can use the calendar's ctag to see if anything in the calendar has changed.

```javascript
const Scrapegoat = require("scrapegoat");

const scrapegoat = new Scrapegoat(config);

scrapegoat.getCtag().then(console.log);
```

You'll get an object, which looks like this:

```javascript
{
href: '/cal.php/calendars/test/holidays/',
name: 'Holiday',
ctag: '452'
}
```

### scrapegoat.getEtags()

Fetches the etags of all events. You can use the events etags to see if an event has changed.

```javascript
scrapegoat.getEtags().then(console.log);
```

You'll get an array of objects, which looks like this:

```javascript
[
{
ics: "/cal.php/calendars/test/holidays/6151613161614616.ics",
etag: "fc46dd304e83f572688c68ab63816c8f"
},
{
ics: "/cal.php/calendars/test/holidays/6816189165131651.ics",
etag: "8d59671ba294af1de0e0b154a8ea64c2"
}
];
```

### scrapegoat.getEvents(events)

Fetches events with its data/details. `events` has to be an array with objects, which contain an ics attribute. The ics attribute has to look like the ones we get with `getEtags()`.

```javascript
const events = [
{ ics: '/cal.php/calendars/user/calendar_name/12345.ics' }
{ ics: '/cal.php/calendars/user/calendar_name/67890.ics' }
];

scrapegoat.getEvents(events).then(console.log);
```

Output should be something like this:

```javascript
[
{
ics: "/cal.php/calendars/test/holidays/1234564316516.ics",
etag: "fc46dd304e83f572688c68ab63816c8f",
data: {
title: "Holiday: John Doe",
uid: "56ea42c0-e4af-4ac8-8d60-d95996c9ddc5",
location: "Kissing, Augsburg, Germany",
description: null,
start: "2017-02-16T00:00:00.000Z",
end: "2017-02-18T00:00:00.000Z",
duration: {
weeks: 0,
days: 2,
hours: 0,
minutes: 0,
seconds: 0,
isNegative: false
},
type: { recurring: false, edited: false },
createdAt: "2017-01-24T15:33:04.000Z"
}
}
];
```

### scrapegoat.getAllEvents()

Fetches all events of the given calendar with data/details.

### scrapegoat.getEventsByTime(start, end)

Fetch all events which occur between `start` and `end` (have to be valid [iCal Dates](http://www.kanzaki.com/docs/ical/dateTime.html)).
If you leave `start` and `end` out, you'll get all upcoming events from today.
Passing only one date as a parameter returns all upcoming events from that date.
The end-date must be larger that the start-date.

Example using [moment.js](http://momentjs.com/) for date formatting:

```javascript
const moment = require("moment");

const start = moment()
.startOf("month")
.format("YYYYMMDD[T]HHmmss[Z]");
const end = moment()
.endOf("month")
.format("YYYYMMDD[T]HHmmss[Z]");

scrapegoat.getEventsByTime(start, end).then(console.log);
```

The example below gets all events happening on a single day

```javascript
const moment = require("moment");

const start = moment("20170216T0000").format("YYYYMMDD[T]HHmmss[Z]");
const end = moment("20170216T2300").format("YYYYMMDD[T]HHmmss[Z]");

scrapegoat.getEventsByTime(start, end).then(console.log);
```

## Sponsors

[](https://peerigon.com)