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…
criar a categoria (funcionando)
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”.
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
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
## 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")