ㅁ 개요
O 프로그램 소개
- 이번 글은 이전글([프로젝트] 파이썬 음성으로 네이버 캘린더에 자동으로 일정 등록하는 chatGPT plugin 만들기 - 1.네이버 개발자 센터에 애플리케이션 등록하기))에 이은 5번째 글로 여기서는 이전글에서 획득한 토큰정보를 활용하여 네이버 캘린더에 일정을 추가하는 방법에 대하여 설명합니다.
자세한 내용은 아래 네이버 개발자센터 사이트를 참고하시기 바랍니다.
O 완성된 프로그램 실행 화면
1.아래와 같이 프로그램을 실행하면 일정 추가에 성공했다라는 결과를 얻게 됩니다.
2. 실제로 네이버 캘린더에 가서 확인 결과 위에서 나열한 일정이 잘 등록된 것을 볼 수 있습니다.
ㅁ 세부 내용
O 완성된 소스
소스 : 3.use_API_write.py
# 네이버 API 예제 - 캘린더 일정 추가하기
import os
import sys
import urllib.request
import random
import string
from config import *
header = "Bearer " + token # Bearer 다음에 공백 추가
url = "https://openapi.naver.com/calendar/createSchedule.json"
calSum = urllib.parse.quote("[제목] Py 캘린더API로 추가한 일정")
calDes = urllib.parse.quote("[상세] 회의 합니다")
calLoc = urllib.parse.quote("[장소] 그린팩토리")
# uid = token[1:16] # UUID 생성 (임시로 일단 토큰값을 잘라서 사용)
# UID값을 만들기 위해 토큰의 15자리로 랜덤하게 만듦
uid = ''.join(random.choices(token, k=15))
print(uid,"++++++++++++++")
scheduleIcalString = "BEGIN:VCALENDAR\n"
scheduleIcalString += "VERSION:2.0\n"
scheduleIcalString += "PRODID:Naver Calendar\n"
scheduleIcalString += "CALSCALE:GREGORIAN\n"
scheduleIcalString += "BEGIN:VTIMEZONE\n"
scheduleIcalString += "TZID:Asia/Seoul\n"
scheduleIcalString += "BEGIN:STANDARD\n"
scheduleIcalString += "DTSTART:19700101T000000\n"
scheduleIcalString += "TZNAME:GMT%2B09:00\n"
scheduleIcalString += "TZOFFSETFROM:%2B0900\n"
scheduleIcalString += "TZOFFSETTO:%2B0900\n"
scheduleIcalString += "END:STANDARD\n"
scheduleIcalString += "END:VTIMEZONE\n"
scheduleIcalString += "BEGIN:VEVENT\n"
scheduleIcalString += "SEQUENCE:0\n"
scheduleIcalString += "CLASS:PUBLIC\n"
scheduleIcalString += "TRANSP:OPAQUE\n"
scheduleIcalString += "UID:" + uid + "\n" # 일정 고유 아이디
# scheduleIcalString += "DTSTART;TZID=Asia/Seoul:20161116T190000\n" # 시작 일시
# scheduleIcalString += "DTEND;TZID=Asia/Seoul:20161116T193000\n" # 종료 일시
scheduleIcalString += "DTSTART;TZID=Asia/Seoul:20230522T190000\n" # 시작 일시
scheduleIcalString += "DTEND;TZID=Asia/Seoul:20230522T193000\n" # 종료 일시
scheduleIcalString += "SUMMARY:" + calSum + " \n" # 일정 제목
scheduleIcalString += "DESCRIPTION:" + calDes + " \n" # 일정 상세 내용
scheduleIcalString += "LOCATION:" + calLoc + " \n" # 장소
#scheduleIcalString += "RRULE:FREQ=YEARLY;BYDAY=FR;INTERVAL=1;UNTIL=20201231\n" + # 일정 반복시 설정
scheduleIcalString += "ORGANIZER;CN=관리자:mailto:admin@sample.com\n" # 일정 만든 사람
scheduleIcalString += "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=admin:mailto:user1@sample.com\n" # 참석자
scheduleIcalString += "CREATED:20230509T190000Z\n" # 일정 생성시각
scheduleIcalString += "LAST-MODIFIED:20230509T190000Z\n" # 일정 수정시각
scheduleIcalString += "DTSTAMP:20230509T190000Z\n" # 일정 타임스탬프
scheduleIcalString += "END:VEVENT\n"
scheduleIcalString += "END:VCALENDAR"
print(scheduleIcalString)
data = "calendarId=defaultCalendarId&scheduleIcalString=" + scheduleIcalString
request = urllib.request.Request(url, data=data.encode("utf-8"))
print(request)
request.add_header("Authorization", header)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
# {"result":"success","code":200,"returnValue":{"calendarId":"17061888","processType":"create","icalUid":"AAANXhz98LbVaB"}}
else:
print("Error Code:" + rescode)
O 주요 내용
1. 아래 소스코드에 대해서 간략히 설명합니다.
(대부분의 내용은 주석을 달아 놓았으니 이부분을 참고하여 주시기 바랍니다.)
관련 모듈을 임포트 해줍니다. (line 2~7)
(아래 config.py 파일에 인증 정보(Client ID, Client SECRET, AUTHORIZATION CODE 등)를 넣어 둡니다)
헤더와 API 주소를 설정합니다.(line 10~11)
스케줄의 제목, 상세내용, 장소를 넣어 줍니다.(line 14~16)
일정의 고유아이디를 만들기 위해 토큰값의 15값으로 랜덤하게 생성해 주었습니다.(line 19~20)
일정의 시작날짜와 종료날짜를 정해 줍니다.(line 44~45)
필요한 경우 일정을 만든사람, 참석자, 일정 생성시간 등을 지정해 줄 수 있습니다.(line 50~54)
이제 위에서 지정한 값으로 API를 호출하고 (line 62~63)
HTTP 요청 헤더에 "Authorization" 헤더를 추가하고, header 변수로 인증 정보를 전달해 줍니다.(line 65)
이후 응답코드가 200이면 응답값을 디코딩 후 print()문으로 찍어봅니다.(line 66~73)
ㅁ 정리
O 우리가 배운 내용
> 1.일정 추가
service.events().insert(calendarId='primary', body=event).execute() <-- service객체의 insert()함수로 일정 추가
service.events().delete(calendarId='primary', eventId=event['id']).execute() <-- service객체의 delete()함수로 일정 삭제
오늘은 여기까지이며, 댓글과 하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.
위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.
감사합니다.
※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.