API: Crear una categoría pero agregar más detalles a la descripción

Estoy utilizando una solicitud de API a Discourse para crear una categoría, pero en el mismo proceso me gustaría agregar texto o una referencia de URL, etc., a la descripción de la categoría (¿o es description_text, ya que intento entender las propiedades o diferencias?).

También tenga en cuenta que podría haber un “robot” agregando contenido a esto, por lo que la mejor manera sería…

  1. Crear categoría (funciona)
  2. Actualizar la categoría o, más bien, agregar el enlace, pero ¿a category.description o category.description_text?

Sin embargo, no hay propiedades en la actualización excepto name, color y text_color, ¿hay otras propiedades que pueda enviar? ¿Como (y cuáles) description o/tal vez description_text?

Todo lo que quiero hacer es agregar un enlace slug a un sitio relacionado con la categoría que estoy creando… o simplemente agregar al final de la descripción de la categoría de Discourse “[link][https/example.projectxxx”.

Hola, Andrew.

Aunque la documentación solo enumera esas 3 propiedades, la mayoría de las propiedades mencionadas en el objeto de respuesta se pueden establecer en la llamada de creación. Lo descubrí cuando necesité automatizar la creación de un gran número de categorías con la misma configuración, excepto por el nombre y los identificadores (slugs).

La única propiedad que necesitaba establecer y con la que consistentemente tuve problemas son los permisos.

Sí, he notado que las propiedades permitidas no son las definidas en la documentación de la API.

Sin embargo, para establecer la “descripción” de la categoría, lo cual es muy confuso ya que la descripción de la categoría no es en absoluto lo que se muestra; de hecho, debajo del nombre de la categoría está el elemento HTML “cooked”, que está vacío, así que ¿cómo se configura eso…

Por lo que he podido entender, debo crear una publicación en “Acerca de --nombre de la categoría–…” y debe ser la primera publicación en esa categoría, pero creo que hay otros criterios, como el contenido “cooked” o también el hecho de que tengamos un Bot que publica allí primero.

He intentado ajustar las fechas de created_at/updated_at para que mi publicación aparezca arriba, de modo que la categoría la capture o utilice como descripción, ¡pero sin éxito! Debe haber algo que no estoy entendiendo sobre “cooked” y/o la descripción de la categoría. Es muy confuso y no he encontrado documentación, pero seguiré buscando. Si alguien tiene ideas sobre qué probar, por favor házmelo saber.

Hola, desenterrando este viejo tema…

¿Hay alguna forma de entender cuál es la diferencia entre description_text y description?

Quiero decir, aparte de averiguarlo por mí mismo :slight_smile:

¡quizás @alank ya lo descubrió!

¡Gracias!

Si no está documentado en otro lugar, buscar en los archivos de especificaciones del repositorio de discourse responderá a preguntas como esta con una comprensión básica de cómo funcionan los lenguajes de programación.

En este caso, las siguientes líneas en la especificación de la categoría muestran que description_text se deriva de description y está disponible inmediatamente después de establecer description.

Esto me dice que description es la cadena sin procesar para la descripción y, al establecerla, se procesa y se asigna a description_text. O description_text podría calcularse al acceder a él, pero lo dudo; de cualquier manera, description es la que se debe establecer.

Gracias Simon, eso aclara la diferencia entre ambos parámetros.

Sin embargo, acabo de intentarlo y ninguno de esos dos parámetros está realmente configurado en la descripción de la categoría (o en la publicación de la categoría Acerca de). Por lo tanto, el problema del OP persiste.

Añadiendo: Veo en el archivo categories.json que estos parámetros de descripción son lo que quiero, ¡pero de alguna manera no puedo configurarlos a través de la API!

Si no están documentados para la carga útil de la solicitud POST, no puedes confiar en poder establecerlos de esa manera, incluso si funcionara.

Sospecho que lo que hay que hacer es mirar el topic_url en la respuesta después de crear la categoría, luego obtener un solo tema usando el id de esa URL. Mira el post_stream en la respuesta que tiene una matriz de publicaciones, imagino que tendrá un elemento.

Obtén el id de esa publicación y luego actualiza una sola publicación para agregar tu descripción. Eso debería activar la actualización de la descripción de la categoría de la misma manera que editar la publicación en Discourse, misma regla de la primera línea.

Iba a publicar, eso es exactamente lo que hice :slight_smile:

    ## crear categoría
    ret_cat = client.create_category(name, color = color, **kwargs)

    ## obtener el id de la primera publicación 
    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']
    ## modificar la primera publicación
    ret_post = client.update_post(first_post_id, cat["about_msg"],"set up")