Skip to content

Instantly share code, notes, and snippets.

@lincerely
Last active July 2, 2023 12:06
Show Gist options
  • Save lincerely/92904bcb73bce7266b7236412e8d5fe7 to your computer and use it in GitHub Desktop.
Save lincerely/92904bcb73bce7266b7236412e8d5fe7 to your computer and use it in GitHub Desktop.
register Youtube scheduled live reminder in macOS calendar (a calendar named "Youtube" need to be created before running this script)
#!/bin/bash
tmp=/tmp/yt.html
url="$1"
if [ -z "$url" ]; then
echo "USAGE: $0 URL"
exit 1
fi
curl -sL "$url" > $tmp
title=`grep -m 1 -o 'title":"[^"]*' $tmp | sed 's/^title":"//'`
location=`grep -m 1 -o 'name": "[^"]*' $tmp | sed 's/^name": "//'`
startTime=`grep -m 1 -o 'scheduledStartTime":"[^"]*' $tmp | sed 's/^scheduledStartTime":"//'`
startTime=`date -d "$startTime" +%s`
rm $tmp
osascript -l JavaScript -e 'function run(argv){
let url = argv[0]
let eventStart = new Date(argv[1] * 1000)
let location = argv[2]
let title = argv[3]
if (argv.length != 4) {
return "Usage: URL STARTTIME LOCATION TITLE"
}
var app = Application.currentApplication()
app.includeStandardAdditions = true
var Calendar = Application("Calendar")
var eventEnd = new Date(eventStart.getTime() + 1000)
var ytCalendars = Calendar.calendars.whose({name: "Youtube"})
var ytCalendar = ytCalendars[0]
var event = Calendar.Event({summary: title, startDate: eventStart, endDate: eventEnd, url: url, location: location})
var len = ytCalendar.events.push(event)
Calendar.reloadCalendars()
// Set alarm at 5 min before the event start
var displayAlarm = Calendar.DisplayAlarm({triggerInterval: -5})
ytCalendar.events[len - 1].displayAlarms.push(displayAlarm)
Calendar.reloadCalendars()
}' "$url" "$startTime" "$location" "$title"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment