通过API将特定帖子标记为已读?

你好,
我正在通过 Discourse API 拉取帖子。我使用的是 Python。该请求调用以下代码(本质上是一个 GET 请求),并返回类似于 此帖子 的 .json 数据。

    def topic_by_id(self, topic_id, **kwargs):
        return self._get("/t/{0}.json".format(topic_id), **kwargs)

返回的帖子包含一个 'read' 标志。我发送的帖子标记为 read=True,但我接收到的帖子全部标记为 read=False,除非我主动登录 Discourse 并阅读它们。

是否可以通过 API 根据 post_id 将特定帖子标记为已读?我一直在研究 pydiscourse,他们提供了一个添加阅读时间的方法,据称这也会将帖子标记为“已读”,但无论我“添加”多少阅读时间,.json 端点返回的结果仍为 false。我不关心阅读的“间隔”,只要我能标记特定的帖子 ID 即可。

    def topic_timings(self, topic_id, time, timings={}, **kwargs):
        """
        设置阅读帖子所花费的时间
        此举的副作用是将帖子标记为已读

        参数:
            topic_id: { post_number: ms }
            time: 整个主题花费的时间(单位是什么????)
            timings:
        """
        kwargs["topic_id"] = topic_id
        kwargs["topic_time"] = time
        for post_num, timing in timings.items():
            kwargs["timings[{0}]".format(post_num)] = timing
        return self._post("/topics/timings", **kwargs)

类似的功能已经通过 notifications/mark-read 端点用于通知:

    def mark_read(self, notification_id):
        return self._put('/notifications/mark-read.json', id=notification_id)

另外,如果能够将整个主题(其中的所有帖子)标记为已读,也是一种可行的变通方案。

欢迎提供任何帮助!

编辑:此功能也必须适用于私信。

好吧,我通过浏览器对其进行了逆向工程。topic_timings() 函数必须使用 timings={} 参数中的帖子索引(post index)来调用,而不是帖子 ID。

我想这算是相当可以接受的变通方案,不过我还是希望能有一个基于帖子 ID 的方法,因为从 ID 推断索引并不容易(需要先获取实际的帖子内容)。

我不确定这是否有帮助,但我认为存在一个 /p/<POST_ID> 路由。