Estou me perguntando se existe uma maneira, através da API do Discourse, de obter o ID de um post a partir de uma URL canônica de post, como https://myweb.site/t/<topic_id>/<post_number>, onde, claro, TN é o ID/número do tópico e PN é o número do post.
Fiz algumas tentativas usando os dados do fluxo de posts (post stream) de https://myweb.site/t/<topic_id>.json, pensando que, por exemplo, o post número N seria o ID do n-ésimo post nos dados post_stream->stream retornados pela chamada. No entanto, se posts foram excluídos ou se foram feitas divisões no fluxo de posts do tópico, o post_number não corresponde à n-ésima posição no stream.
Eu precisava desesperadamente do mesmo recurso há dois anos. Ainda não descobri como fazer isso (mais) corretamente. Este é meu truque:
def get_topic_post(topic_id, post_num)
topic = @api.topic(topic_id, {print: true})
post_obj = topic['post_stream']['posts'].find { |p| p['post_number'] == post_num }
if post_obj
post_obj['id']
else
throw "Não foi possível encontrar o post #{topic_id}/#{post_num}."
end
end
Isso contorna os problemas mencionados: o {print: true} resolve o problema de paginação. O find é necessário porque a moderação pode criar uma incompatibilidade entre os índices do array e os números dos posts.
Funciona para tópicos do tamanho com o qual estou trabalhando. Ainda assim, uma maneira mais direta através da API seria mais satisfatória.