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
- Host: GitHub
- URL: https://github.com/peerigon/scrapegoat
- Owner: peerigon
- Created: 2015-02-23T13:19:42.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T07:21:59.000Z (over 3 years ago)
- Last Synced: 2025-08-09T15:43:57.640Z (11 months ago)
- Language: JavaScript
- Homepage:
- Size: 955 KB
- Stars: 30
- Watchers: 15
- Forks: 13
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# scrapegoat
[](https://travis-ci.com/peerigon/scrapegoat)
[](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)