如何用Python创建Discourse主题并立即回复该新主题?
解决Discourse主题回复的API操作问题
核心结论
- 回复主题必须用POST请求,PUT仅用于编辑已有帖子,二者不要混淆。
topic_slug是主题的URL友好别名,API请求中非必填项,仅用topic_id即可准确定位主题。它的作用是让主题URL更易读(比如标题为"每日产品更新",slug可能是"mei-ri-chan-pin-geng-xin"),但不影响API调用的有效性。
Python示例代码
需提前准备Discourse论坛域名、API密钥和对应用户名,以下是创建主题+跟进回复的完整代码:
import requests # 基础配置 DISCOURSE_DOMAIN = "你的论坛域名,例如https://your-forum.com" API_KEY = "你的API密钥" API_USERNAME = "你的API用户名" def create_topic(title, content, category_id=1): """创建新主题""" url = f"{DISCOURSE_DOMAIN}/posts.json" payload = { "title": title, "raw": content, "category": category_id } headers = { "Api-Key": API_KEY, "Api-Username": API_USERNAME } response = requests.post(url, json=payload, headers=headers) response.raise_for_status() return response.json() def reply_to_topic(topic_id, content): """回复指定ID的主题""" url = f"{DISCOURSE_DOMAIN}/posts.json" payload = { "topic_id": topic_id, "raw": content } headers = { "Api-Key": API_KEY, "Api-Username": API_USERNAME } response = requests.post(url, json=payload, headers=headers) response.raise_for_status() return response.json() # 实际使用示例 if __name__ == "__main__": # 1. 创建主主题(第一部分内容) main_topic = create_topic( title="2024年XX月XX日产品更新", content="这是第一部分内容,控制在150000字符以内..." ) topic_id = main_topic["topic_id"] print(f"主题创建成功,ID: {topic_id}") # 2. 发送拆分后的第二部分内容作为回复 reply_result = reply_to_topic( topic_id=topic_id, content="这是拆分后的第二部分内容,继续补充产品更新细节..." ) print(f"回复发送成功,回复ID: {reply_result['id']}")
关键细节补充
- 请求方式区分:Discourse API中,所有创建新内容的操作(主题、回复)都用POST;PUT仅用于修改已存在的帖子(比如编辑主题正文或回复内容)。
- 字符拆分逻辑:可以先判断内容长度,超过150000字符时,截取前N字符作为主题内容,剩余部分循环调用
reply_to_topic接口分开发送即可。
内容的提问来源于stack exchange,提问作者Sev
相关产品推荐
相关产品推荐

