大家好!
我想知道是否可以通过 Discourse API,从类似 https://myweb.site/t/<topic_id>/<post_number> 的规范帖子 URL 中获取帖子 ID,其中 TN 显然是主题 ID/编号,PN 是帖子编号。
我尝试了几次,使用了来自 https://myweb.site/t/<topic_id>.json 的帖子流数据,以为例如帖子编号 N 会对应调用返回的 post_stream->stream 数据中的第 n 个帖子 ID。但如果帖子被删除或在主题帖子流中进行了拆分,帖子编号并不对应 stream 中的第 n 个位置。
我是否忽略了什么显而易见的东西?
3 个赞
你试过 /t/<topic_id>/posts.json 吗?它会返回 20 条帖子,你可以取其中的第 post_number 条,其中包含帖子 ID。
但如果要获取超过 20 条,就需要分页,目前我还没看出如何实现。
2 个赞
benkeks
(benkeks🍪)
2021 年7 月 21 日 16:43
3
两年前我就急需同样的功能。我至今仍未找到更恰当的实现方法。这是我的变通方案:
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 找到更直接的方式,会更令人满意。
1 个赞