파이썬 프로젝트 및 응용/음성으로 네이버 캘린더에 자동으로 일정 등록하는 plugin 만들기

[프로젝트] 파이썬 음성으로 네이버 캘린더에 자동으로 일정 등록하는 chatGPT plugin 만들기 - 4.이전 글의 정보로 API를 이용하여 네이버 캘린더에 일정 추가하기

파기차차 2023. 6. 17. 11:02
728x90
반응형
SMALL

ㅁ 개요

 

O 프로그램 소개

 

 

- 이번 글은 이전글([프로젝트] 파이썬 음성으로 네이버 캘린더에 자동으로 일정 등록하는 chatGPT plugin 만들기 - 1.네이버 개발자 센터에 애플리케이션 등록하기))에 이은 5번째 글로 여기서는 이전글에서 획득한 토큰정보를 활용하여 네이버 캘린더에 일정을 추가하는 방법에 대하여 설명합니다.

 

 

자세한 내용은 아래 네이버 개발자센터  사이트를 참고하시기 바랍니다.

캘린더 일정 추가 API 명세
https://developers.naver.com/docs/login/calendar-api/calendar-api.md#%EC%BA%98%EB%A6%B0%EB%8D%94-%EC%9D%BC%EC%A0%95-%EC%B6%94%EA%B0%80-api-%EB%AA%85%EC%84%B8

 

 

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)

 

 

 

 

 - 소스파일을 cmd, 파워쉘 또는 vscode 등에서 아래와 같이 실행하시기 바랍니다.
 

 

 > python 3.use_API_write.py
 

 

 

 

 


 
 

 

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()함수로 일정 추가

 > 2.일정 삭제

   service.events().delete(calendarId='primary', eventId=event['id']).execute() <-- service객체의 delete()함수로 일정 삭제

 

 

 

오늘은 여기까지이며, 댓글하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.

위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.

 

 

 

 

감사합니다.

 

 

 

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

 

728x90
반응형
LIST