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

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

我意识到这有点笨重。 它将JSON拉成一个字符串,然后我必须将其形成一个哈希值,所以我知道我没有做到这么好,但是这很大程度上我只是为了测试history方法对于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://内部hipchat服务器/ V2 /间/ 2 /历史反转=假日期= 2015-06-25T20:42:18.658439&最大结果= 1000&的auth_token = XXX

这非常繁琐:

  • 如果您只指定当前日期,没有时区,如API中所述,它将被解释为昨晚午夜,您只能获得昨天或更早的消息。
  • 如果您尝试指定明天的日期,则响应为400 Bad Request This day has not yet come to pass
  • 如果您将时间指定为2015-06-25T20:42:18.658439 + 00:00,这是HipChat API响应中的时间格式,HipChat的解析器似乎失败并将其解释为昨晚午夜。

当您收到回复时,请取出最旧的items.date属性,删除时区,然后使用更新的date参数重新提交上述URL:

HTTPS://内部hipchat服务器/ V2 /间/ 2 /历史反转=假日期= 2015-06-17T19:56:34.533182&最大结果= 1000&的auth_token = XXX

如果通知在同一秒内向同一房间发布了多条消息,请务必包含微秒。

这将为您提供下一页消息。 继续这样做,直到收到少于max-results消息。

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

哦是的,并且/v2/room call中的last_active属性不可信,因为当通知消息发布到房间时它不会更新。

Interesting Posts