REST API로 달력 이벤트 추가하기

안녕하세요,

REST API를 사용하여 주제에 캘린더 이벤트를 추가하는 방법에 대해 몇 시간 동안 검색해 보았지만, 불행히도 답변을 찾을 수 없었습니다.

카테고리 캘린더를 생성했고 수동으로 만든 주제 이벤트를 표시할 수는 있었지만, REST API를 통해 주제를 추가할 때 주제 이벤트 생성을 자동화하는 방법을 찾지 못했습니다.

"discourse-post-events/events.json"을 찾았지만 이 API를 시도해 보니 “Not Found” 오류가 발생했습니다. 이벤트 ID가 필요한데 어떻게 생성하는지 모르기 때문이라고 추측합니다.

도와주셔서 감사합니다. 조언과 의견을 부탁드립니다.

API를 통해 이벤트용 주제나 게시물을 생성하고, 게시물의 raw 파라미터 값으로 [event][/event] 태그를 추가하는 것은 어떨까요?

핵심은 시작 event 태그와 닫기 태그 사이에 줄바꿈 문자(\n)가 있어야 한다는 점입니다.

아래 예시에서는 명령줄에서 JSON을 다루는 것보다 더 쉬우므로 "Content-Type: multipart/form-data"를 사용했습니다. 또한 $api_key는 실제 API 키 값으로 설정되어 있습니다:

curl -X POST "http://localhost:4200/posts.json" \
-H "Api-Key: $api_key" \
-H "Api-Username: scossar" \
-H "Content-Type: multipart/form-data" \
-F title="Can I create an event via the API?" \
-F category=6 \
-F raw='[event start="2024-05-10 20:00" status="public" timezone="America/Vancouver" end="2024-05-10 21:30" allowedGroups="trust_level_0"]\n[/event]'
    const url = DISCOURSE_BASE_URL + '/posts.json';
    const message = {
        method: 'POST',
        headers: {
            'Api-Key': DISCOURSE_API_KEY,
            'Api-Username': DISCOURSE_API_USERNAME,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            "title": title, 
            "raw": content,
            "category": categoryId
        })
    };
    const response1 = await fetch(url, message);

raw가 다음과 같을 때 “Unprocessable Entity” 오류가 발생합니다:

[event start="2024-05-16 19:00" status="public" name="585" timezone="Europe/Paris" allowedGroups="trust_level_0" end="2024-05-16 21:00"]
[/event]

이벤트 선언을 제거하고 대안 설명을 넣으면 포럼이 업데이트되지만, 이벤트 선언을 넣는 순간 “Unprocessable Entity” 오류가 발생합니다.

제가 어디서 잘못되고 있는지 이해가 되지 않습니다.

문자열 내에서 발생하는 이중 인용부호를 이스케이프 처리해야 합니다. 예를 들어:

"raw": "[event start=\"2024-05-16 19:00\"...

또한 이벤트 태그 사이에 줄바꿈 문자(\n)를 포함하는지 확인하세요.

데이터를 가져와서 UX를 통해 게시물을 생성해 보았습니다. 이벤트 이름은 최소 5자여야 한다는 메시지가 떴습니다.

그 다음 @simon 님의 curl 쿼리를 시도해 보니 흥미로운 결과가 나왔습니다. 이벤트를 생성할 권한이 없어 게시물을 생성할 수 없다는 것이었습니다.

그래서 관리자 권한을 부여해 주었습니다.

이제 정상적으로 작동합니다. 모든 것이 잘 되고 있습니다.

도와주셔서 감사합니다!