Do número do post para o ID do post

Olá a todos!

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.

Estou ignorando algo óbvio?

Você já tentou /t/<topic_id>/posts.json? Isso retornará 20 posts e você pode pegar o post de número post_number, que conterá um ID de post.

Mas para obter mais de 20, será necessário usar paginação, algo que não vejo como fazer no momento.

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.