Slack自动化日历事件

huangapple go评论58阅读模式
英文:

Slack automate calendar events

问题

我正在寻找一种自动创建日历事件的方法。我参与了学校的多个空间,它们不断发布一些定期发生的事件。

我想知道是否有一种方法可以自动创建这些日历事件。我想编写一个使用Slack API的脚本,可以读取我所参与的所有空间的消息,扫描它们以查看是否有任何与事件相关的信息,并在我的Google日历中创建一个新的日历事件。我想在一天结束时对来自所有空间的所有消息运行这个脚本。

英文:

I'm looking for a way to automate the creation of calendar events. I'm part of multiple spaces in my school and they keep on posting some events that are happening on a regular basis.

I was wondering is there's a way to automate these calendar events. I want to write a script with Slack api's that can read the messages from all the spaces I'm part of and scan them to see if there's any event related information and create a new calendar event in my google calendars. I want to run this at the end of the day on all the messages from all the spaces.

答案1

得分: 0

以下是代码的翻译部分:

from __future__ import print_function

import os
import json
import pprint

import time
import parsedatetime
from datetime import datetime
from datetime import timedelta

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def get_google_service():
    creds = None
    SCOPES = ['https://www.googleapis.com/auth/calendar']
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    return build('calendar', 'v3', credentials=creds)


def send_google_calendar_invite(service, channel_name, start_time, end_time):
    try:
        template_data = '''
                        {
                            "summary": "event_name",
                            "location": "event_location",
                            "description": "event_description",
                            "start": {
                                "dateTime": "event_start_time",
                                "timeZone": "America/Los_Angeles"
                            },
                            "end": {
                                "dateTime": "event_end_time",
                                "timeZone": "America/Los_Angeles"
                            }
                        }
                        '''
        template_data = template_data.replace('event_name', channel_name)
        template_data = template_data.replace('event_location', channel_name+'-meeting')
        template_data = template_data.replace('event_description', channel_name+'-description')
        template_data = template_data.replace('event_start_time', start_time)
        template_data = template_data.replace('event_end_time', end_time)
        json_object = json.loads(template_data)
        json_formatted_str = json.dumps(json_object, indent=2)
        print(json_formatted_str)

        event = service.events().insert(calendarId='primary', body=json_object).execute()
        print('Event created: %s' % (event.get('htmlLink')))

    except HttpError as error:
        print('An error occurred: %s' % error)


def read_slack_messages():
    channel_id = "C04QL76V21X"

    try:
        lastHourDateTime = datetime.now() - timedelta(hours=24)
        client = WebClient(token=open("secrets.txt", "r").read())
        conversation_history = client.conversations_history(channel=channel_id, oldest=time.mktime(lastHourDateTime.timetuple()))
        channel_info_result = client.conversations_info(channel=channel_id)

        channel_name = channel_info_result['channel']['name']
        conversation_messages = conversation_history["messages"]
        print("{} messages found in {}".format(len(conversation_messages), id))
        
        service = get_google_service()
        for message in conversation_messages[:2]:
            chat_message = message['text']

            try:
                cal = parsedatetime.Calendar()
                dates = cal.parse(chat_message)
                print(dates)
                start_time = time.strftime('%Y-%m-%dT%H:%M:%S-000:00', (dates[0]))
                end_time = start_time[:11]+f"{int(start_time[11:13])+1:02}"+start_time[13:]
                print(chat_message, ' : ', start_time, ' ||| ', end_time)

                send_google_calendar_invite(service, channel_name, start_time, end_time)

            except TypeError as e: 
                print(' : Nope : ', e);

    except SlackApiError as e:
        print("Error getting conversation: {}".format(e))


if __name__ == '__main__':
    read_slack_messages()

请注意,代码中的特殊字符(如单引号、双引号和大括号)并没有进行翻译,因为它们是代码中的语法元素。

英文:
from __future__ import print_function
import os
import json
import pprint
import time
import parsedatetime
from datetime import datetime
from datetime import timedelta
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
def get_google_service():
creds = None
SCOPES = ['https://www.googleapis.com/auth/calendar']
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
return build('calendar', 'v3', credentials=creds)
def send_google_calendar_invite(service, channel_name, start_time, end_time):
try:
# f = open("template.json", "r")
# template_data = f.read()
template_data = '''
{
"summary": "event_name",
"location": "event_location",
"description": "event_description",
"start": {
"dateTime": "event_start_time",
"timeZone": "America/Los_Angeles"
},
"end": {
"dateTime": "event_end_time",
"timeZone": "America/Los_Angeles"
}
}
'''
template_data = template_data.replace('event_name', channel_name)
template_data = template_data.replace('event_location', channel_name+'-meeting')
template_data = template_data.replace('event_description', channel_name+'-desrpition')
template_data = template_data.replace('event_start_time', start_time)
template_data = template_data.replace('event_end_time', end_time)
json_object = json.loads(template_data)
json_formatted_str = json.dumps(json_object, indent=2)
print(json_formatted_str)
event = service.events().insert(calendarId='primary', body=json_object).execute()
print('Event created: %s' % (event.get('htmlLink')))
except HttpError as error:
print('An error occurred: %s' % error)
def read_slack_messages():
channel_id = "C04QL76V21X"
try:
lastHourDateTime = datetime.now() - timedelta(hours=24)
client = WebClient(token=open("secrets.txt", "r").read())
conversation_history = client.conversations_history(channel=channel_id, oldest=time.mktime(lastHourDateTime.timetuple()))
channel_info_result = client.conversations_info(channel=channel_id)
channel_name = channel_info_result['channel']['name']
conversation_messages = conversation_history["messages"]
print("{} messages found in {}".format(len(conversation_messages), id))
# import pdb; pdb.set_trace();
service = get_google_service()
for message in conversation_messages[:2]:
chat_message = message['text']
try:
cal = parsedatetime.Calendar()
dates = cal.parse(chat_message)
print(dates)
start_time = time.strftime('%Y-%m-%dT%H:%M:%S-%000:00', (dates[0]))
end_time = start_time[:11]+f"{int(start_time[11:13])+1:02}"+start_time[13:]
print(chat_message, ' : ', start_time, ' ||| ', end_time)
send_google_calendar_invite(service, channel_name, start_time, end_time)
except TypeError as e: 
print(' : Nope : ', e);
except SlackApiError as e:
print("Error getting conversation: {}".format(e))
if __name__ == '__main__':
read_slack_messages()

huangapple
  • 本文由 发表于 2023年2月8日 09:20:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/75380529.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定