REST API for ToolsOnAir Just:In Engine Calendar

Recently I had a project that required remote systems to create calendar events for ToolsOnAir’s Just:In ingest product. While Just:In supports scheduled record, it is based on the Apple Calendar for scheduling events.

The bad news here is that Apple Calendar local calendars don’t have any method for remote access/sharing. The good news is that Apple Calendar can be manipulated via Applescript. Since the Just:In Multi UI generally runs on a different machine from the Just:In engine, it seemed to make sense to build a way for other systems to schedule records on an engine that may be in a machine room other that Remote Desktop/VNC.

The REST API is written in flask microframework using the flask_restful library for python.

Source code is available on github here: https://github.com/szumlins/toa_rest

Once you have the API up and running, working with it is fairly easy. You need to POST data to the API in JSON format. The JSON looks as follows:

{
	"start_time": "2015-10-14T13:45:30",
	"end_time": "2015-10-14T13:55:30",
	"summary": "NameOfFileWithoutExtension",
	"description": "Description of event for calendar notes",
	"UID": "UNIQUE-ID-OF-THIS-CALENDAR"
}

This data would create an event that started at 1:45:30pm in the timezone of the engine that would end at 1:55:30pm. The output file would be named NameOfFileWithoutExtension.ext (ext being either .mov,.mp4 or .mxf depending on your settings).

This data needs to be POSTed to the URL http://ip.of.engine:service_port/CalendarName

ToolsOnAir Just:In Engine will create calendars in Apple Calendar for the name of each channel you have associated with the Engine. Let’s set up a printed scenario here.

ToolsOnAir Channel name: Router1
ToolsOnAir Engine IP: 192.168.10.55
API Service Port: 4445
Filename: A_Movie.mov
Start Time: October 22nd, 2015 @ 10:45:15pm
End Time: October 22nd, 2015 @ 11:03:33pm
Description: My First Clip

So now we know the URL, port, calendar, and data. We can formulate a simple curl command to send this:

bash-3.2# curl -X POST -H content-type:application/json -d '{"start_time": "2015-10-22T22:45:15","end_time": "2015-10-22T23:03:33","summary": "A_Movie","description": "My First Clip","UID": "1234-5678-9012"}' http://192.168.10.55:4445/Router1

On success, this should return JSON encoded success info with success or failure of event registration along with the summary (filename) and UID of the post call.

Because the Calendar.app doesn’t refresh automatically when events are posted in this way, you may need to check and then uncheck a calendar to force a refresh. This doesn’t mean the event isn’t registered, it is simply the UI hasn’t shown it.