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