I’m using API request to Discourse to create a category, however in the same process I would like to add text or URL reference etc, to Category description (or is it description_text as I try to understand the properties or differences).
Note also that there might be a “robot” adding to this, so the best way…
create category (working)
Update category or more so append the link, but to category.description or category.description_text)?
However there are no properties on update except name, color, text_color, so are there other properties I can send? Like (and which) description or/maybe description_text?
All I want to do is add a slug link to a site related to the category I’m creating… or simply add at the end of the Discourse Category description “[link][https/example.projectxxx”
Although the docs only list those 3 properties, most of the properties mentioned in the Response object can be set on the create call. I found this out when I needed to script the creation of a large number of categories with the same settings except for the name and slugs.
The only property I needed to set and consistently had issues with is the permissions.
Yes, I’ve noticed that properties allowed are not those defined in the API documentation.
However to set the Category “description” which is very confusing as the category description is not at all what is displayed, in fact below the category name is the HTML element “cooked” which is empty, so how to set that…
From what I’ve been able to understand, I must set a post in the “About the --category name-- …” and it must be the first post in that category, but I think there is other critaria, like the cooked or also the fact that we have a Bot that first posts there.
I’ve tried adjusting the created_at/updated_at dates to make my post appear above so that the category will grab or use that description, but no luck! There must be something I’m not understanding about the “cooked” and/or category description. Very confusing and I’ve found no docs, but I’ll keep looking, if anyone has ideas on what to try, please let me know.
Y a-t-il un moyen de comprendre la différence entre description_text et description ?
Je veux dire, à part le découvrir en le faisant
Peut-être que @alank l’a découvert depuis !
Merci !
Si ce n’est pas documenté ailleurs, la recherche dans les fichiers de spécifications du dépôt discourse répondra à des questions comme celle-ci avec une compréhension de base du fonctionnement des langages de programmation.
Dans ce cas, les lignes suivantes dans la spécification de la catégorie montrent que description_text est dérivé de description et est immédiatement disponible après avoir défini description.
Cela me dit que description est la chaîne brute pour la description et qu’une fois définie, elle est traitée et attribuée à description_text. Ou description_text pourrait être calculé lors de l’accès, mais j’en doute, dans tous les cas description est celui à définir.
Merci Simon, cela clarifie la différence entre les deux paramètres.
Cependant, je viens d’essayer et aucun de ces deux paramètres n’est réellement défini dans la description de la catégorie (ou dans le message À propos de la catégorie). Le problème de l’OP demeure donc.
Ajout : Je vois dans le fichier categories.json que ces paramètres de description sont ce que je veux, mais je ne parviens pas à les définir via l’API !
S’ils ne sont pas documentés pour la charge utile de la requête POST, vous ne pouvez pas vous fier à la possibilité de les définir comme cela, même si cela fonctionnait par hasard.
Je soupçonne que la chose à faire est de regarder le topic_url dans la réponse après avoir créé la catégorie, puis de récupérer un seul sujet en utilisant l’identifiant de cette URL. Regardez le post_stream dans la réponse qui contient un tableau de messages, j’imagine qu’il aura un élément.
Obtenez l’identifiant de ce message, puis mettez à jour un seul message pour ajouter votre description. Cela devrait déclencher la mise à jour de la description de la catégorie de la même manière que la modification du message dans Discourse, même règle de la première ligne.
J’allais justement poster, c’est exactement ce que j’ai fait
## créer une catégorie
ret_cat = client.create_category(name, color = color, **kwargs)
## obtenir le premier id de post
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']
## modifier le premier post
ret_post = client.update_post(first_post_id, cat["about_msg"],"set up")