ㅁ 개요
O 프로그램 소개
- 이번 글은 이전글([프로젝트] 파이썬 음성으로 구글 캘린더에 자동으로 일정 등록하는 chatGPT plugin 만들기 - 2.샘플 스크립트 실행하기(token.json 파일 만들기))에 이은 4번째 글로 여기서는 이전 글에서 만든 인증 및 권한 정보 파일(token.json)를 가지고, 구글 캘린더 API를 이용하여 구글 캘린더에 일정을 추가하고, 삭제하는 방법에 대해 설명합니다.
O 완성된 프로그램 실행 화면
**일정 추가 부분
1.아래와 같이 일정을 추가하는 소스파일과 일정을 삭제하는 소스파일을 만들었습니다.
2. 일정 추가 소스를 실행하면 아래와 같이 실행됩니다.
3. 실제 구글 캘린더에 가서 확인해 보내 위에서 실행(소스에 코딩)한 대로 일정이 추가되었습니다.
4. 위의 2번 결과로 나온 URL을 복사하여 웹브라우저에 붙여넣으면 아래와 같이 나타나며, 일정이 등록(추가)된 것을 보여주고 있습니다.
**일정 삭제 부분
1. del_cal.py를 실행하면 아래와 같이 나옵니다.(일정 삭제)
2. 구글 캘린더에 가서 확인 결과 아래와 같이 위에서 만들었던 일정이 삭제되었습니다.
ㅁ 세부 내용
O 완성된 소스
소스 : 2.add_cal.py
import datetime
from google.oauth2.credentials import Credentials #pip install --upgrade google-api-python-client
# pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
from googleapiclient.errors import HttpError
from googleapiclient.discovery import build
# API 인증 정보
creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/calendar'])
# 구글 캘린더 API 클라이언트 생성
service = build('calendar', 'v3', credentials=creds)
# 일정 등록 함수
def create_event(start_time, end_time, summary, location=None, description=None):
event = {
'summary': summary,
'location': location,
'description': description,
'start': {
'dateTime': start_time.strftime('%Y-%m-%dT%H:%M:%S'),
'timeZone': 'Asia/Seoul',
},
'end': {
'dateTime': end_time.strftime('%Y-%m-%dT%H:%M:%S'),
'timeZone': 'Asia/Seoul',
},
}
event = service.events().insert(calendarId='primary', body=event).execute()
print(f'Event created: {event.get("htmlLink")}')
# 일정 등록 예시
start_time = datetime.datetime(2023, 4, 22, 20, 0, 0)
end_time = datetime.datetime(2023, 4, 22, 21, 0, 0)
summary = 'Test Event3'
location = 'Seoul, South Korea'
description = 'This is a test event'
try:
create_event(start_time, end_time, summary, location, description)
except HttpError as error:
print(f'An error occurred: {error}')
소스 : 3.del_cal.py
import datetime
from google.oauth2.credentials import Credentials #pip install --upgrade google-api-python-client
from googleapiclient.errors import HttpError
from googleapiclient.discovery import build
from datetime import datetime, time, timedelta
# API 인증 정보
# creds = Credentials.from_authorized_user_file('credentials.json', ['https://www.googleapis.com/auth/calendar']) # 1. 이거한다음에 아래로 바꿔야 함
creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/calendar'])
# 구글 캘린더 API 클라이언트 생성
service = build('calendar', 'v3', credentials=creds)
start_date = datetime(2023, 4, 20).isoformat() + 'Z' # Z는 UTC 시간을 의미합니다.
end_date = datetime(2023, 4, 23).isoformat() + 'Z'
events_result = service.events().list(calendarId='primary', timeMin=start_date, timeMax=end_date, singleEvents=True, orderBy='startTime').execute()
events = events_result.get('items', [])
for event in events:
# 일치하는 일정을 찾으면 삭제합니다.
# print(event['summary'])
if event['summary'] == 'Test Event3':
service.events().delete(calendarId='primary', eventId=event['id']).execute()
print('일정이 삭제되었습니다.')
O 주요 내용
1. 아래 소스코드에 대해서 간략히 설명합니다.
구글 캘린더 API를 이용하기 위한 관련 모듈을 임포트 해줍니다.( line 1~5)
API를 사용하기 위해서는 인증/권한 정보가 필요한데, 이전 글에서 만든 'token.json' 파일과 API를 사용할 범위를 지정해 줍니다.(line 8)
위의 정보를 이용해서 구글 캘린더를 사용할 수 있도록 객체(service)를 만들어 줍니다.(line 11)
사용자가 일정 등록을 위한 날짜, 제목 등을 알려주면 자동으로 일정을 추가할 수 있도록 함수 형태로 만들어 두었습니다.(line 13~30)
여기서 중요한 부분은 service객체의 insert()함수로 사용자의 입력값을 등록 하고 있습니다.
service.events().insert(calendarId='primary', body=event).execute() <-- event 딕셔너리의 내용으로 일정을 추가(insert)
2.add_cal.py
아래 코드는 일정 등록을 위한 변수(날짜, 제목 등)를 설정해 주고, (line32~37)
위에서 정의한 일정등록함수를 호출하여 일정을 추가합니다.(line 40)
3.del_cal.py
아래는 일정을 삭제하는 소스코드이며, 위의 일정 추가 코드와 거의 유사하므로, 다른 주요한 부분만 설명합니다.
일정을 삭제하기 위해서는 특정 값으로 필터링을 하고, 해당 일정을 찾아야 삭제할 수 있습니다. 그렇지 않으면 등록된 모든 일정이 날아갈 수 있으므로 주의해야 합니다.
우리는 앞에서 등록했던 일정을 삭제하기로 하겠습니다.
앞에서 등록했던 일정을 찾기 위해서 아래와 같이 날짜 범위와 등록된 일정의 제목으로 찾습니다.
날짜 범위 : 아래의 경우 2023.4.20~2023.4.23 사이에서 찾게 됩니다.( 'Z'는 UTC 시간을 의미하며, 우리나라 시간으로 맞추기 위해 +9시간을 해주게 됩니다.)
start_date = datetime(2023, 4, 20).isoformat() + 'Z' # Z는 UTC 시간을 의미합니다.
end_date = datetime(2023, 4, 23).isoformat() + 'Z'
등록된 일정의 제목 : Test Event3
아래 코드에서는 2023.4.20~4.23 사이에 등록된 일정을 확인 후 events[]에 담아 두고, 이 중에서 일정의 제목이 'Test Event3'인 일정을 삭제하고 있습니다.
만일 2023.4.20~4.23 사이에 등록된 일정 중 일정 제목 'Test Event3'이 여러개인 경우 모두 삭제되니, 주의가 필요합니다.
ㅁ 정리
O 우리가 배운 내용
> 1.일정 추가
service.events().insert(calendarId='primary', body=event).execute() <-- service객체의 insert()함수로 일정 추가
service.events().delete(calendarId='primary', eventId=event['id']).execute() <-- service객체의 delete()함수로 일정 삭제
오늘은 여기까지이며, 댓글과 하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.
위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.
감사합니다.
※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.