如何通过API从Hipchat获取房间的所有消息历史记录?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过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格式发送当前时间的查询,但不包括时区,作为开始日期:
这非常繁琐:
- 如果您只指定当前日期,没有时区,如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:
如果通知在同一秒内向同一房间发布了多条消息,请务必包含微秒。
这将为您提供下一页消息。继续这样做,直到你收到少于max-results
的消息。
在我完成上述工作之前,我尝试了一个start-index
参数,它会给你几页结果,响应缺少links.next
属性,但它不会给你完整的历史记录。根据statistics.messages_sent
,在历史上有9166条消息的聊天室中,它只返回了3217条消息。所以不要使用它。您可以使用statistics.messages_sent
作为完整性检查,以确定是否收到所有消息。
哦,是的,并且last_active
呼叫中的/v2/room
属性不可信,因为当通知消息发布到房间时它不会更新。
以上是关于如何通过API从Hipchat获取房间的所有消息历史记录?的主要内容,如果未能解决你的问题,请参考以下文章