Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何通过API从Hipchat获取房间的所有消息历史记录?_Ruby_Hipchat - Fatal编程技术网

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

Ruby 如何通过API从Hipchat获取房间的所有消息历史记录?,ruby,hipchat,Ruby,Hipchat,我今天使用了(v2)一点,遇到了一个奇怪的问题,我无法真正为一个房间找到所有的历史记录。例如,当我查询一个特定的日期时,它似乎只能检索给定日期的一小部分历史记录。我曾计划简单地遍历所有日期,以一种我可以使用的格式提取历史记录,但最终还是碰到了这个问题,现在不确定是否真的有可能完全提取历史记录 我意识到这有点笨重。它将JSON作为一个字符串,然后我必须将其形成一个散列,因此我知道我并没有尽可能地做到这一点,但下面是我快速做的,只是为了测试API的history方法: api_token = "MY

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

我意识到这有点笨重。它将JSON作为一个字符串,然后我必须将其形成一个散列,因此我知道我并没有尽可能地做到这一点,但下面是我快速做的,只是为了测试API的
history
方法:

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错误请求今天尚未通过
  • 如果将时间指定为2015-06-25T20:42:18.658439+00:00,这是HipChat API响应中的时间格式,HipChat的解析器似乎会失败,并将其解释为昨晚午夜
返回响应后,使用最旧的
items.date
属性,去掉时区,然后使用更新的
日期
参数重新提交上述URL:

确保包含微秒,以防通知在同一秒内向同一房间发送多条消息

这将为您提供下一页消息。继续执行此操作,直到收到少于
max results
的消息

在我完成上述工作之前,我尝试传递了一个
start index
参数,它将为您提供几页结果,而响应缺少
链接。下一个
属性,但它不会提供完整的历史记录。根据
统计,在历史记录中有9166条消息的聊天室中,它只返回3217条消息。所以不要使用它。您可以使用
statistics.messages\u sent
作为是否收到所有邮件的健全性检查


哦,是的,
/v2/room
呼叫中的
最后一次激活的
属性不可信,因为当通知消息发布到房间时,它不会更新。

好。你能把你的源代码作为一个插件,这样其他人也可以使用它吗。