API:创建类别,但在描述中追加更多详情

我正在使用 Discourse 的 API 请求来创建分类,但希望在同一过程中添加文本或 URL 引用等内容到分类描述中(或者是我在理解属性或差异时应该使用 description_text 吗?)。

另请注意,可能会有“机器人”向此添加内容,因此最佳方式是:

  1. 创建分类(已实现)
  2. 更新分类,或者更具体地说,追加链接,但应添加到 category.description 还是 category.description_text?

然而,更新操作似乎只有 namecolortext_color 这几个属性,那么我还可以发送其他属性吗?比如(哪些)description 或/也许 description_text

我只想做的是添加一个指向与所创建分类相关网站的 slug 链接……或者简单地在 Discourse 分类描述的末尾添加“[link][https/example.projectxxx"。

你好,Andrew。

虽然文档中只列出了这三个属性,但响应对象中提到的大多数属性都可以在创建调用时设置。我是在需要脚本化创建大量具有相同设置(除名称和 slug 外)的类别时才发现这一点的。

唯一需要设置且 consistently 遇到问题的属性是权限。

是的,我注意到允许设置的属性与 API 文档中定义的不一致。

然而,要设置类别的“描述”非常令人困惑,因为类别描述与显示的内容完全不同。实际上,在类别名称下方是一个名为“cooked”的 HTML 元素,但它是空的。那么该如何设置它呢?

根据我的理解,我必须在“关于 --类别名称-- …

您好,挖出这个旧话题……

有没有办法弄清楚 description_textdescription 之间的区别?
我的意思是,除了自己去发现 :slight_smile:
也许 @alank 已经弄清楚了!
谢谢!

如果其他地方没有记录,在 discourse 存储库的 spec 文件中进行搜索,就能解答类似这样的问题,只要对编程语言的工作原理有基本了解即可。

在这种情况下,category spec 中的以下几行表明 description_text 是从 description 派生出来的,并在设置 description 后立即可用。

这对我来说意味着 description 是描述的原始字符串,在设置它之后,它会被处理并赋值给 description_text。或者 description_text 可以在访问时计算,但我对此表示怀疑,无论如何 description 是要设置的那个。

谢谢 Simon,这让我明白了这两个参数的区别。

不过,我刚试过,这两个参数实际上在类别描述(或“关于类别”帖子)中都没有设置。所以 OP 的问题依然存在。

补充说明:我在 categories.json 文件中看到了我想要的这些描述参数,但我无法通过 API 设置它们!

如果 POST 请求负载未记录这些参数,那么即使它们碰巧有效,您也不能指望能够这样设置它们。

我怀疑应该这样做:在创建类别后,查看响应中的 topic_url,然后使用该 URL 中的 ID 获取单个主题。查看响应中的 post_stream,其中包含一个帖子数组,我猜它将只有一个元素。

获取该帖子的 ID,然后 更新单个帖子 以添加您的描述。这应该会像在 Discourse 中编辑帖子一样触发类别描述的更新,遵循相同的首行规则。

我正要发帖,这正是我所做的 :slight_smile:

    ## 创建类别
    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")