3

今日、 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')) が、ここでも、部屋の履歴の一部しか得られませんでした。これを期待どおりに機能させるために不足している追加のパラメーターはありますか?

4

1 に答える 1

6

私はこれを機能させましたが、それは大きな苦痛でした。

開始日として、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 に記載されているように、タイムゾーンを指定せずに現在の日付のみを指定すると、昨夜の午前 0 時と解釈され、昨日またはそれ以前のメッセージのみが表示されます。
  • 代わりに明日の日付を指定しようとすると、応答は になり400 Bad Request This day has not yet come to passます。
  • 時刻を 2015-06-25T20:42:18.658439+00:00 (HipChat API 応答に含まれる時刻の形式) として指定すると、HipChat のパーサーが失敗し、昨夜の午前 0 時と解釈するようです。

応答が返ってきたら、最も古い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プロパティがありませんが、完全な履歴は表示されません。によると、履歴に 9166 件のメッセージがあるチャットルームでは、statistics.messages_sent3217 件のメッセージしか返されませんでした。使用しないでください。statistics.messages_sentすべてのメッセージを取得するかどうかのサニティ チェックとして使用できます。

そうそう、通知メッセージが部屋に投稿されたときに更新されないためlast_active、呼び出しのプロパティは/v2/room信頼できません。

于 2015-06-26T02:56:55.553 に答える