API : Créer une catégorie mais ajouter plus de détails à la description

J’utilise une requête API vers Discourse pour créer une catégorie, mais dans le même processus, je souhaiterais ajouter du texte ou une référence URL, etc., à la description de la catégorie (ou est-ce description_text, car j’essaie de comprendre les propriétés ou les différences).

Notez également qu’un « robot » pourrait ajouter du contenu ici, donc la meilleure méthode serait…

  1. Créer la catégorie (fonctionne)
  2. Mettre à jour la catégorie ou, plus précisément, ajouter le lien, mais dans category.description ou category.description_text ?

Cependant, la mise à jour ne semble proposer que les propriétés name, color et text_color. Existe-t-il d’autres propriétés que je peux envoyer ? Par exemple, description ou peut-être description_text (et laquelle) ?

Tout ce que je veux faire, c’est ajouter un lien de type slug vers un site lié à la catégorie que je crée… ou simplement ajouter à la fin de la description de la catégorie Discourse « [lien][https/example.projectxxx ».

Bonjour Andrew,

Bien que la documentation ne liste que ces trois propriétés, la plupart des propriétés mentionnées dans l’objet de réponse peuvent être définies lors de l’appel de création. Je l’ai découvert lorsque j’ai dû scripter la création d’un grand nombre de catégories avec les mêmes paramètres, à l’exception du nom et des identifiants (slugs).

La seule propriété que j’ai dû définir et avec laquelle j’ai systématiquement rencontré des problèmes est celle des permissions.

Oui, j’ai remarqué que les propriétés autorisées ne correspondent pas à celles définies dans la documentation de l’API.

Cependant, pour définir la « description » de la catégorie, ce qui est très confus car la description de la catégorie n’a rien à voir avec ce qui est affiché : en réalité, sous le nom de la catégorie se trouve l’élément HTML « cooked », qui est vide. Comment le définir alors…

D’après ce que j’ai pu comprendre, je dois créer un message dans la section « À propos de --nom de la catégorie–… » et ce message doit être le premier dans cette catégorie. Mais je pense qu’il existe d’autres critères, comme le contenu « cooked » ou encore le fait qu’un Bot publie en premier dans cette catégorie.

J’ai essayé d’ajuster les dates created_at/updated_at pour que mon message apparaisse en haut, afin que la catégorie utilise cette description, mais sans succès ! Il doit bien y avoir quelque chose que je ne comprends pas concernant le « cooked » et/ou la description de la catégorie. C’est très confus, et je n’ai trouvé aucune documentation, mais je continuerai à chercher. Si quelqu’un a des idées sur ce que je pourrais essayer, n’hésitez pas à me le faire savoir.

Salut, je déterre ce vieux sujet…

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 :slight_smile:
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 :slight_smile:

    ## 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")