alank
(Andrew Lank)
1
我正在使用 Discourse 的 API 请求来创建分类,但希望在同一过程中添加文本或 URL 引用等内容到分类描述中(或者是我在理解属性或差异时应该使用 description_text 吗?)。
另请注意,可能会有“机器人”向此添加内容,因此最佳方式是:
- 创建分类(已实现)
- 更新分类,或者更具体地说,追加链接,但应添加到 category.description 还是 category.description_text?
然而,更新操作似乎只有 name、color 和 text_color 这几个属性,那么我还可以发送其他属性吗?比如(哪些)description 或/也许 description_text?
我只想做的是添加一个指向与所创建分类相关网站的 slug 链接……或者简单地在 Discourse 分类描述的末尾添加“[link][https/example.projectxxx"。
你好,Andrew。
虽然文档中只列出了这三个属性,但响应对象中提到的大多数属性都可以在创建调用时设置。我是在需要脚本化创建大量具有相同设置(除名称和 slug 外)的类别时才发现这一点的。
唯一需要设置且 consistently 遇到问题的属性是权限。
alank
(Andrew Lank)
3
是的,我注意到允许设置的属性与 API 文档中定义的不一致。
然而,要设置类别的“描述”非常令人困惑,因为类别描述与显示的内容完全不同。实际上,在类别名称下方是一个名为“cooked”的 HTML 元素,但它是空的。那么该如何设置它呢?
根据我的理解,我必须在“关于 --类别名称-- …
artur
(Artur Lobanov)
4
您好,挖出这个旧话题……
有没有办法弄清楚 description_text 和 description 之间的区别?
我的意思是,除了自己去发现 
也许 @alank 已经弄清楚了!
谢谢!
如果其他地方没有记录,在 discourse 存储库的 spec 文件中进行搜索,就能解答类似这样的问题,只要对编程语言的工作原理有基本了解即可。
在这种情况下,category spec 中的以下几行表明 description_text 是从 description 派生出来的,并在设置 description 后立即可用。
这对我来说意味着 description 是描述的原始字符串,在设置它之后,它会被处理并赋值给 description_text。或者 description_text 可以在访问时计算,但我对此表示怀疑,无论如何 description 是要设置的那个。
artur
(Artur Lobanov)
6
谢谢 Simon,这让我明白了这两个参数的区别。
不过,我刚试过,这两个参数实际上在类别描述(或“关于类别”帖子)中都没有设置。所以 OP 的问题依然存在。
补充说明:我在 categories.json 文件中看到了我想要的这些描述参数,但我无法通过 API 设置它们!
如果 POST 请求负载未记录这些参数,那么即使它们碰巧有效,您也不能指望能够这样设置它们。
我怀疑应该这样做:在创建类别后,查看响应中的 topic_url,然后使用该 URL 中的 ID 获取单个主题。查看响应中的 post_stream,其中包含一个帖子数组,我猜它将只有一个元素。
获取该帖子的 ID,然后 更新单个帖子 以添加您的描述。这应该会像在 Discourse 中编辑帖子一样触发类别描述的更新,遵循相同的首行规则。
artur
(Artur Lobanov)
8
我正要发帖,这正是我所做的 
## 创建类别
ret_cat = client.create_category(name, color = color, **kwargs)
## 获取第一个帖子 ID
cat_id = ret_cat["category"]["id"]
print("Cat id", cat_id)
topics = client.category_topics(cat_id)
first_post_id = client.topic_posts(topics["topic_list"]['topics'][0]["id"])['post_stream']['posts'][0]['id']
## 修改第一个帖子
ret_post = client.update_post(first_post_id, cat["about_msg"],"set up")