0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RocketChatで保存期間を超過したMSGを検出する

Last updated at Posted at 2021-01-20

RocketChatで長期間メッセージを保管せず運用したいケースがあります。チャットメッセージが溜りまくってメールと同じような状態は避けたいしチャット結論をwikiにまとめるよう促す意味もあります。

REST

/api/v1/channels.messagesを使用します。
ゴッそり持って来るには便利です。

出力はdataframe

RocketChat投稿用ヘルパー関数を別途作っていますのでDataFrameで返すようにしています。

ちょっとだけ注意

RocketChatでのAPI取得件数はデフォルトで上限設定があります。この緩和を行うかoffsetでループするかといった対応が必要となります。

import requests
import pandas as pd
import datetime
import dateutil.parser

from pprint import pprint

# API パラメータたち
HEADERS ={
    'X-Auth-Token': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'X-User-Id': 'xxxxxxxxxxtZDz',
    'Content-Type': 'application/json',
}

params = (
    ('roomId', 'GENERAL'),
)

# メッセージ保管期間
LIMIT = 1

# ヘルパー関数定義
'''ISO -> datetime型 '''
def ISOtimeToDatetime(target):
    JST = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
    return dateutil.parser.parse(target).astimezone(JST)

def judgeRocketChatMessage(target_date, limit):
    '''保存期間判定 '''
    today = datetime.date.today()
    diff_date = datetime.timedelta(limit)

    __DEBUG__ = False    
    if __DEBUG__:
        print(target_date.date())
        print(today)
        print(diff_date)
        print(today - target_date.date())
    
    return (today - target_date.date() > diff_date)

# リクエスト実行
## TODO try〜except処理
response = requests.get('http://xxx.xxx.xxx.xxx:3000/api/v1/channels.messages', 
                         headers=HEADERS, 
                         params=params)
# 結果確認
pprint(response)
pprint(len(response.json()['messages']))

# 削除対象判定結果をDataFrameで返す
_list = []
for _ in response.json()['messages']:
    # TODO _['_updatedAt']と今時刻との比較を
    # このタイミングで行い削除対象を確定する方が効率が良い
    _list.append([_['rid'],
                  _['_id'], 
                  ISOtimeToDatetime(_['_updatedAt']),
                  judgeRocketChatMessage(ISOtimeToDatetime(_['_updatedAt']), LIMIT),
                  _['msg']])
# DataFrame化
df = pd.DataFrame(_list)
df.columns = ['チャンネル','MSG_ID','更新時間','削除対象','MSG']

結果はこちらから

df.head(5)
df.query('削除対象 == True').head(5)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?