Me pregunto si existe una forma, a través de la API de Discourse, de obtener el ID de un post a partir de una URL canónica de ese post, como https://myweb.site/t/<topic_id>/<post_number>, donde, por supuesto, TN es el ID/número del tema y PN es el número del post.
He realizado algunos intentos utilizando los datos del flujo de publicaciones (post stream) de https://myweb.site/t/<topic_id>.json, pensando que, por ejemplo, el post número N sería el ID del n-ésimo post en los datos post_stream->stream devueltos por la llamada. Sin embargo, si se han eliminado posts o se han realizado divisiones en el flujo de publicaciones del tema, el número del post no corresponde a la posición n-ésima en el stream.
Necesitaba desesperadamente la misma función hace dos años. Todavía no he descubierto cómo hacerlo de manera (más) adecuada. Este es mi truco:
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 "No se pudo encontrar la publicación #{topic_id}/#{post_num}."
end
end
Esto evita los problemas mencionados: {print: true} aborda el problema de la paginación. El find es necesario porque la moderación puede crear una discrepancia entre los índices del array y los números de publicación.
Funciona para los temas del tamaño con el que estoy trabajando. Sin embargo, una forma más directa a través de la API se sentiría más satisfactoria.