안녕하세요.
톡 캘린더 APi 사용 중 권한 문제가 발생하여 문의 드립니다.
캘린더 목록 조회하기는 가능하나 캘린더 아이디를 이용하여 일정 조회를 할 때 403 권한 에러가 발생하는데요.
두 항목 모두 로그인 활성화 / 동의 항목(톡 캘린더) 을 요구 하고, 관련 설정이 되어 있음에도 불구하고
캘린더 아이디를 이용해서 일정 조회를 할 때만 에러가 나는 것이 의아합니다.
원인을 알 수 있을까요?
요청 양식은 아래와 같습니다.
(로그인 활성화, 동의 항목 절차는 사전에 완료하였습니다.)
url = “https://kapi.kakao.com/v2/api/calendar/events”
header = {
“Authorization”: f"Bearer {ACCESS_TOKEN}",
}
data = {
“calendar_id”: “primary”,
“from”: “2022-10-26T00:00:00Z”,
“to”: “2022-10-30T00:00:00Z”,
}
print(
requests.post(url=url, headers=header, data=data).text,
requests.post(url=url, headers=header, data=data).status_code,
)
제가 실수했네요. 다시 확인해보겠습니다. 답변 감사드립니다
이어서 하나 더 질문 하겠습니다. 일정 생성하기 API 관련된 문의 인데요.
{“msg”:“failed to parse parameter. name=event, stringToParse=title, paramString=title, paramStringAlias=null”,“code”:-2}
아래와 같이 요청했을 때, 위와 같이 title을 파싱하지 못했다는 에러가 나서요. 문서에서는 string으로 되어 있었는데, 혹시 다른 형태로 넣어줘야 할까요? 언어는 파이썬 입니다.
url = "https://kapi.kakao.com/v2/api/calendar/create/event"
header = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
data = {
"event": {
"title": "테스트이벤트",
"time": {
"start_at": "2022-12-31T19:00:00Z",
"end_at": "2022-12-31T21:00:00Z",
"time_zone": "Asia/Seoul",
"all_day": False,
"lunar": False,
},
},
}
아래처럼 사용해 보시겠어요?
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/x-www-form-urlencoded"
}
data = '''event={
"title: "테스트이벤트",
"time" : { ...
'''
requests.post(url, headers=headers, data=data)
주말에도 답변 주셔서 감사드립니다
말씀주신대로 아래와 같이 테스트 해봤는데, 아직 에러가 발생하는 것 같습니다. ㅜ title을 인식하지 못하는 것 같네요
에러명
{“msg”:“failed to parse parameter. name=event, stringToParse=-, paramString=-, paramStringAlias=null”,“code”:-2}
API를 이용해 일정 생성 테스트
url = "https://kapi.kakao.com/v2/api/calendar/create/event"
header = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/x-www-form-urlencoded",
}
data = """event={
"title": 이벤트테스트",
"time": {
"start_at": "2023-01-01T19:00:00Z",
"end_at": "2023-01-01T21:00:00Z",
"time_zone": "Asia/Seoul",
"all_day": False,
"lunar": False,
},
},
"""
encoded_body = data.encode("utf-8")
print(requests.post(url=url, headers=header, data=encoded_body).text)
print(requests.post(url=url, headers=header, data=encoded_body).status_code)
event 파라미터를 값은 JSON 포멧에 맞추어 작성 하셔야 합니다.
잘못된 예
data = """event={
"title": 이벤트테스트", <- !!! 따옴표 없음
"time": {
"start_at": "2023-01-01T19:00:00Z",
"end_at": "2023-01-01T21:00:00Z",
"time_zone": "Asia/Seoul",
"all_day": False, <- !!! False 가 아닌 false
"lunar": False, <- !!! False 가 아닌 false, 다음 프로퍼티가 없으므로 쉼표 제거
}, <- 다음 프로퍼티가 없으므로 쉼표 제거
}, <- 다음 프로퍼티가 없으므로 쉼표 제거
"""
수정 예
data = """event={
"title": "이벤트테스트",
"time": {
"start_at": "2023-01-01T19:00:00Z",
"end_at": "2023-01-01T21:00:00Z",
"time_zone": "Asia/Seoul",
"all_day": false,
"lunar": false
}
}
"""
파라미터 값이 길기에 실수하기 쉬울것 같은데요 아래처럼 구분지어서 사용하는것도 좋을것 같네요
event = '''{
"title": "이벤트테스트",
"time": {
"start_at": "2023-01-01T19:00:00Z",
"end_at": "2023-01-01T21:00:00Z",
"time_zone": "Asia/Seoul",
"all_day": false,
"lunar": false
} }
'''
data = "event=" + parse.quote(event) <- url인코딩 하시는걸 추천
잘되네요 woody님…감사합니다. 다른 API 사용할 때도 말씀 주신 내용 잘 참고할 수 있도록 하겠습니다. 주말 간에도 답변 주셔서 감사드립니다. 새해 복 많이 받으세요.