API: Criar uma categoria, mas adicionar mais detalhes na descrição

Estou usando uma requisição de API para o Discourse para criar uma categoria, mas no mesmo processo gostaria de adicionar texto ou uma referência de URL, etc., à descrição da categoria (ou será description_text, já que estou tentando entender as propriedades ou diferenças).

Note também que pode haver um “robô” adicionando conteúdo a isso, então a melhor maneira…

  1. criar a categoria (funcionando)
  2. atualizar a categoria ou, mais precisamente, anexar o link, mas em category.description ou category.description_text?

No entanto, não há propriedades na atualização exceto name, color, text_color. Existem outras propriedades que posso enviar? Como (e quais) description ou/ou description_text?

Tudo o que quero fazer é adicionar um link slug para um site relacionado à categoria que estou criando… ou simplesmente adicionar ao final da descrição da categoria do Discourse “[link][https/example.projectxxx”.

Olá, Andrew.

Embora a documentação liste apenas essas 3 propriedades, a maioria das propriedades mencionadas no objeto de resposta pode ser definida na chamada de criação. Descobri isso quando precisei automatizar a criação de um grande número de categorias com as mesmas configurações, exceto o nome e os slugs.

A única propriedade que precisei definir e com a qual tive problemas consistentes são as permissões.

Sim, notei que as propriedades permitidas não são as definidas na documentação da API.

No entanto, para definir a “descrição” da categoria — o que é muito confuso, pois a descrição da categoria não é de forma alguma o que é exibido —, na verdade, abaixo do nome da categoria está o elemento HTML “cooked”, que está vazio. Então, como definir isso…

Pelo que consegui entender, preciso criar uma postagem em “Sobre a --nome da categoria–…” e ela deve ser a primeira postagem nessa categoria. Mas acho que há outros critérios, como o campo “cooked” ou também o fato de termos um Bot que faz a primeira postagem lá.

Tentei ajustar as datas created_at/updated_at para fazer minha postagem aparecer acima, de modo que a categoria puxasse ou usasse essa descrição, mas sem sucesso! Deve haver algo que não estou entendendo sobre o “cooked” e/ou a descrição da categoria. É muito confuso e não encontrei nenhuma documentação, mas continuarei procurando. Se alguém tiver ideias sobre o que tentar, por favor, me avise.

Olá, desenterrando este tópico antigo..
Existe alguma maneira de entender qual a diferença entre description_text e description?
Quero dizer, exceto descobrindo isso :slight_smile:
talvez @alank já tenha descoberto!
Obrigado!

Se não estiver documentado em outro lugar, pesquisar nos arquivos de especificação no repositório discourse responderá a perguntas como esta com um entendimento básico de como as linguagens de programação funcionam.

Neste caso, as seguintes linhas na especificação da categoria mostram que description_text é derivado de description e imediatamente disponível após a configuração de description.

Isso me diz que description é a string bruta para a descrição e, ao configurá-la, ela é processada e atribuída a description_text. Ou description_text pode ser calculado quando acessado, mas duvido, de qualquer forma description é o que deve ser configurado.

Obrigado Simon, isso esclarece a diferença entre ambos os parâmetros.

No entanto, acabei de tentar e nenhum desses dois parâmetros está realmente definido na descrição da categoria (ou na postagem da categoria Sobre). Portanto, o problema do OP permanece.

Adicionando: Vejo no arquivo categories.json que esses parâmetros de descrição são o que eu quero, mas de alguma forma não consigo defini-los através da API!

Se eles não estiverem documentados para a carga útil da solicitação POST, você não poderá contar com a capacidade de defini-los dessa forma, mesmo que funcione.

Suspeito que a coisa a fazer é olhar para o topic_url na resposta após criar a categoria, então obter um único tópico usando o ID desse URL. Olhe para o post_stream na resposta, que tem uma matriz de posts, imagino que terá um elemento.

Obtenha o ID desse post e então atualize um único post para adicionar sua descrição. Isso deve acionar a descrição da categoria sendo atualizada da mesma forma que editar o post no Discourse, a mesma regra da primeira linha.

Eu estava prestes a postar, foi exatamente o que eu fiz :slight_smile:

    ## criar categoria
    ret_cat = client.create_category(name, color = color, **kwargs)

    ## obter o id do primeiro 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']
    ## modificar o primeiro post
    ret_post = client.update_post(first_post_id, cat["about_msg"],"set up")