Slack のメッセージ履歴を取得する
こんにちは、森田です。
Slack APIを用いて、チャンネルの履歴を取得しようと試みたところ、以前と方法が変更になっておりました。
2021 2月以降 channels.historyの廃止
私が作成したコードでは、当初このchannels.historyを使用していました。
import requests url = "https://slack.com/api/channels.history" token = "XXX" header={ "Authorization": "Bearer {}".format(token) } payload = { "channel" : "C022M6U7G4F" } res = requests.get(url, headers=header, params=payload) print(res.json())
しかし、実行結果は、
[ERROR] This method is retired and can no longer be used. Please use conversations.history instead. Learn more: https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api.
見てみると、conversations.history
に変わったよ、となっていますので、下記のように変更したところ上手く動作しました。
import requests url = "https://slack.com/api/conversations.history" token = "XXX" header={ "Authorization": "Bearer {}".format(token) } payload = { "channel" : "C022M6U7G4F" } res = requests.get(url, headers=header, params=payload) print(res.json())
API変更の詳細
スレッドメッセージ取得
channels.historyでは、スレッドのメッセージも一緒に返していましたが、conversations.historyではスレッドのメッセージは取得しません。
代わりに、conversations.replies
としてAPIが提供されていますので、こちらを用いれば可能です。
import requests url = "https://slack.com/api/conversations.replies" token = "XXX" header={ "Authorization": "Bearer {}".format(token) } payload = { "channel" : "C022M6U7G4F", "ts" : "1622007981.001400" } res = requests.get(url, headers=header, params=payload) print(res.json())
実行結果
{ "ok": true, "messages": [ { "client_msg_id": "93e971cf-d7a3-498c-8280-2ac09f3a10a8", "type": "message", "text": "テスト!", "user": "U021JKQFJUC", "ts": "1622007981.001400", "team": "T021R3N359P", "blocks": [ { "type": "rich_text", "block_id": "en=++", "elements": [ { "type": "rich_text_section", "elements": [ { "type": "text", "text": "テスト!" } ] } ] } ], "thread_ts": "1622007981.001400", "reply_count": 1, "reply_users_count": 1, "latest_reply": "1622007986.001500", "reply_users": [ "U021JKQFJUC" ], "is_locked": false, "subscribed": false }, { "client_msg_id": "4d50d26c-554f-4788-afda-f93941b646f4", "type": "message", "text": "いいね", "user": "U021JKQFJUC", "ts": "1622007986.001500", "team": "T021R3N359P", "blocks": [ { "type": "rich_text", "block_id": "SZJ", "elements": [ { "type": "rich_text_section", "elements": [ { "type": "text", "text": "いいね" } ] } ] } ], "thread_ts": "1622007981.001400", "parent_user_id": "U021JKQFJUC" } ], "has_more": false }
conversations.historyとconversations.repliesを組み合わせることで、以前のようなデータを作ることはできそうです!
最後に
Pythonでは、SDKもあるようです。