gpt4 book ai didi

ruby - 如何通过 API 从 Hipchat 获取房间的所有消息历史记录?

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:52 24 4
gpt4 key购买 nike

我使用的是 Hipchat API (v2) 今天遇到了一个奇怪的问题,我无法真正提取一个房间的所有历史记录。例如,当我查询特定日期时,它似乎只会检索给定日期的一小部分历史记录。我曾计划简单地遍历一个房间的所有日期,以我可以使用的格式提取历史记录,但最终遇到了这个问题,现在我不确定是否真的有可能完全提取历史记录。

我意识到这有点笨拙。它把 JSON 作为一个字符串,然后我必须将它形成一个散列,所以我知道我没有做到最好,但我快速做的大致是测试 API 的历史 方法:

api_token = "MY_TOKEN"

client = HipChat::Client.new(api_token, :api_version => 'v2')
history = client['ROOM_NAME'].history

history = JSON.parse(history)

history.each do |key, history|
if history.is_a? Array
history.each do |message|
if message.is_a? Hash
puts "#{message['from']['name']}: #{message['message']}"
end
end
end
end

显然,对此的扩展只是诅咒所需范围内的日期(使用:client['ROOM_NAME'].history(:date => '2010-11-19', :timezone = > 'PST')),但同样,我只获得了房间历史记录的一小部分。是否缺少一些其他参数以使其按预期工作?

最佳答案

我得到了这个工作,但这是一个很大的痛苦。

首先发送一个包含当前时间的查询,以 UTC 格式作为开始日期,但不包括时区:

https://internal-hipchat-server/v2/room/2/history?reverse=false&date=2015-06-25T20:42:18.658439&max-results=1000&auth_token=XXX

这是非常繁琐的:

  • 如果您仅指定当前日期而不指定时区(如 API 中所述),则该日期将被解释为昨晚午夜,您只会收到昨天或更早的消息。
  • 如果您尝试指定明天的日期,响应是 400 Bad Request This yas not yet come to pass
  • 如果您将时间指定为 2015-06-25T20:42:18.658439+00:00,这是 HipChat API 响应中时间的格式,HipChat 的解析器似乎会失败并将其解释为昨晚午夜。<

当您收到响应时,获取最旧的 items.date 属性,去除时区,并使用更新的 date 参数重新提交上述 URL:

https://internal-hipchat-server/v2/room/2/history?reverse=false&date=2015-06-17T19:56:34.533182&max-results=1000&auth_token=XXX

一定要包括微秒,以防通知在同一秒内向同一个房间发布多条消息。

这将为您带来下一页消息。继续这样做,直到收到的消息少于 max-results 条。

有一个 start-index 参数,我在上面的工作之前尝试传递,它会给你几页结果,响应缺少 links.next 属性,但它不会为您提供完整的历史记录。根据 statistics.messages_sent,在历史记录为 9166 条消息的聊天室中,它仅返回 3217 条消息。所以不要使用它。您可以使用 statistics.messages_sent 作为是否收到所有消息的完整性检查。

哦,是的,/v2/room 调用中的 last_active 属性不可信任,因为它不会在通知消息发布到房间时更新。

关于ruby - 如何通过 API 从 Hipchat 获取房间的所有消息历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com