使用 REST API 添加日历事件

您好,

我花了几个小时寻找如何使用 REST API 向主题添加日历事件,但很遗憾,我没有找到答案。

我已经创建了一个类别日历,并且可以显示手动创建的主题事件,但无法在通过 REST API 添加主题时自动创建主题事件。

我找到了“discourse-post-events/events.json”,但在尝试此 API 时,我收到“未找到”。我猜这是因为需要事件 ID,而我不知道如何创建它们。

感谢您的帮助、建议和评论。

1 个赞

如何通过 API 创建主题或帖子,并在帖子中添加 [event][/event] 标签作为其 raw 参数的值?

诀窍似乎在于,event 标签的开始和结束之间必须有一个换行符 (\n)。

在下面的示例中,我使用了 \"Content-Type: multipart/form-data\",因为它比从命令行处理 JSON 更容易。此外,$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]'
1 个赞
    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);

当我使用以下内容时,我收到“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```

另外,请确保在事件标签之间包含换行符 (`\n`)。

我获取了我的数据并尝试使用用户体验创建帖子。它告诉我事件名称必须至少有 5 个字符。

之后,我尝试了你的 curl 查询 @simon,它说了一些有趣的事情:我无法创建帖子,因为我没有创建事件的权限……

然后我给了他管理员权限。

现在一切都正常了。一切都在运行。

感谢你的帮助!

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.