Olá,
Estou buscando posts através da API do Discourse. Estou usando Python para isso. A requisição chama o seguinte código (que faz essencialmente uma requisição GET) e retorna o .json semelhante a este post
def topic_by_id(self, topic_id, **kwargs):
return self._get("/t/{0}.json".format(topic_id), **kwargs)
Os posts retornados possuem um flag 'read'. Os posts que envio têm read=True, mas para os posts que recebo, todos estão marcados como read=False, a menos que eu faça login ativamente no Discourse e os leia.
Existe alguma maneira de marcar um post específico como lido através da API, dado um post_id? Tenho pesquisado sobre o pydiscourse e eles oferecem um método para adicionar tempo de leitura, o que supostamente também marca o post como “lido”, mas não importa quanto tempo de leitura eu “adicione”, o endpoint .json retorna como falso. Não me importo com “lacunas” de leitura, desde que eu possa marcar IDs de posts específicos.
def topic_timings(self, topic_id, time, timings={}, **kwargs):
"""
Define o tempo gasto lendo um post
Um efeito colateral disso é marcar o post como lido
Args:
topic_id: { post_number: ms }
time: tempo total para o tópico (em qual unidade????)
timings:
"""
kwargs["topic_id"] = topic_id
kwargs["topic_time"] = time
for post_num, timing in timings.items():
kwargs["timings[{0}]".format(post_num)] = timing
return self._post("/topics/timings", **kwargs)
Funcionalidade similar já foi alcançada para notificações usando o endpoint notifications/mark-read
def mark_read(self, notification_id):
return self._put('/notifications/mark-read.json', id=notification_id)
Além disso, outra solução alternativa válida seria se fosse possível marcar um tópico inteiro (todos os posts dentro dele) como lido.
Qualquer ajuda é bem-vinda!
EDIT: é necessário que isso também funcione para mensagens privadas.