将您的日历事件推送到您的空闲状态

第一个任务是解析我的Google日历数据。 我首先尝试通过curl和grep处理Google公开的原始.ics数据来进行此操作,但是由于iCal格式不能很容易地由BASH进行解析,因此很快就被证明太困难了。 但是,在搜索时,我遇到了icalBuddy 。

icalBuddy

icalBuddy ( brew -able ical ical-buddy )是一个简单的工具,可让您查询日历事件(我可能应该指出,此处介绍的所有内容都已集成在macOS上)。 这是它可以做什么的快照:

  $ icalBuddy-帮助 

用法:icalBuddy [选项]

指定icalBuddy应该采取的一般措施:

'eventsToday'打印今天发生的事件
'eventsToday + NUM'打印事件发生在今天和NUM天之间
未来
'eventsNow'当前发生的打印事件
“ eventsFrom:START至:END”
打印两个指定日期之间发生的事件
'uncompletedTasks'打印未完成的任务
“未完成的未完成任务”
打印没有截止日期的未完成任务
'tasksDueBefore:DATE'
打印给定之前应完成的未完成任务
日期,可以是“今天+ NUM”或任何常规日期
'日历'打印所有日历
...

将我的Google日历添加到Macbook的“日历”应用后,我使用calendars命令查找我的Google日历的UID。 我将许多日历集成到“日历”应用程序中,因此我绝对想将解析限制在我的工作日历中。

  $ icalBuddy日历 
• 生日
类型:生日
UID:25CA8474-A56D-49AD-B2C4-F6EC62836E01
•在邮件中找到
类型:本地
UID:688AD621-F162-4D41-AA83-BB7DD5264BB3
•以自然语言发现
类型:本地
UID:F8D94E10-21EC-4943-BFD6-2F6E44AC833A
•澳大利亚假期
类型:订阅
UID:EA61FEEB-DFE7-4B8F-B544-4F50AD00E656
•联系人
类型:CalDAV
UID:0D851B8B-94C8-4F4D-9440-311E484C4B4D
•max.chuquimia@tigerspike.com
类型:CalDAV
UID:C9DB2929-0084-4F73-B899-775FA49CBB24
...

抓住UID之后,我能够使用eventsNow子命令来读取……好……现在正在发生的事件!

  $ icalBuddy -ic C9DB2929-0084-4F73-B899-775FA49CBB24事件 
•RMIT指导(max.chuquimia@tigerspike.com)
•写有关Slack / Calendar集成的中型帖子(max.chuquimia@tigerspike.com)
下午6:00-晚上9:00

在开始添加不可避免的脏grep命令链之前,我想使用icalBuddy尽可能多地过滤事件。 只需运行eventsNow子命令即可返回当前发生的事件以及全天事件,如上所示。 幸运的是,我可以添加一些标志来改善输出:
•
--excludeAllDayEvents确实听起来像
•
-b "EVENT:"使用“ EVENT:”而不是项目符号点(这使输出更可grep -able)
•
-tf "DATE:%I:%m%p"将时间格式设置为以“ DATE:”为前缀—再次,这是grep更多功能

我最后的icalBuddy命令看起来并输出如下内容:

  $ icalBuddy -ic C9DB2929-0084-4F73-B899-775FA49CBB24 --excludeAllDayEvents -b“ EVENT:” -tf“ DATE:%I:%M%p” eventsNow 
EVENT:写有关Slack / Calendar集成的中型帖子(max.chuquimia@tigerspike.com)
DATE:06:00PM-DATE:09:00PM

剧本

最后一步是解析脚本中的输出,并通过表情符号和一条消息打入Slack的users.profile.set端点,并显示一条消息以显示我的状态(我们的开发团队非常友好,可以长时间为我提供Slack API令牌前)。 看一看:

并欣赏结果:

当同事要给我发消息时,他们还将在我的聊天文本字段中看到会议详细信息,而不是“写下一些内容”

可是等等! 我们不能只运行一次该脚本!

我刚才说最后一步了吗? 那是一个错误,编写脚本从来没有最后一步。 当然,会议是及时的。 我决定要让我的笔记本电脑在工作时间内每15分钟自动运行一次脚本。 多亏我亲爱的朋友crontab ,这比说起来容易。

  * / 15 06-22 * * 1-5 /scripts/update-slack-status.sh> / dev / null 2>&1 

对于不熟悉Crontab的人:这是一个守护程序,可根据您提供的时间表运行脚本。 在这里,我告诉它在周一至周五( 1–5 )的上午6点至晚上10点( 06–22 )之间每15分钟( */15 )运行一次。 如果您发现cron作业运行得太早,则可以决定在调用icalBuddy命令之前在脚本中添加sleep 1 。

当然,在这个基础上您可能会很有创造力-整合天气,运动成绩,公交时间等等!

强大的力量伴随着巨大的责任……打造伟大的事物!