От номера поста к ID поста

Всем привет!

Интересует, есть ли способ через API Discourse получить ID поста по каноническому URL поста, например https://myweb.site/t/<topic_id>/<post_number>, где, разумеется, TN — это идентификатор/номер темы, а PN — номер поста.

Я пробовал несколько раз использовать данные потока постов из https://myweb.site/t/<topic_id>.json, предполагая, что, например, пост с номером N будет иметь ID, соответствующий N-му элементу в данных post_stream->stream, возвращаемых этим запросом. Однако, если в теме были удалены посты или выполнены операции по разделению, номер поста не соответствует N-й позиции в stream.

Не упускаю ли я что-то очевидное?

Вы пробовали /t/<topic_id>/posts.json? Это вернёт 20 сообщений, и вы сможете выбрать сообщение с номером post_number, которое будет содержать идентификатор сообщения.

Но чтобы получить больше 20 сообщений, потребуется пагинация, и я пока не вижу, как это сделать.

Мне два года назад очень срочно требовалась такая же функция. Я до сих пор не нашел, как сделать это (более) правильно. Вот мой хак:

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 "Could not find post #{topic_id}/#{post_num}."
    end
end

Это обходит упомянутые проблемы: {print: true} решает проблему пагинации. Метод find необходим, так как модерация может создать рассинхронизацию между индексами массива и номерами постов.

Это работает для тем такого размера, с которыми я работаю. Тем не менее, более прямой способ через API показался бы более удовлетворительным.