はじめに
- 今回は、Slackで特定のチャンネルに投稿されたメッセージをクロールする方法について紹介していきます。
Slack API
- 今回、Slack内のメッセージをクロールする際に使用するのが、Slack APIです。
- Slack APIでは、Slack内のさまざまなタイプのデータの読み取り、書き込み、および更新へのアクセスを提供する一連のAPIです。
- Slack APIには、いくつか種類があり、例えばWeb APIやEvent APIなどがあります。
- 今回は、Web APIを使用していきます。
conversations.history
- Slackのweb APIでは、それぞれ用途別にメソッドが分かれています。
- 今回は、その中でもSlackで特定のチャンネルに投稿されたメッセージをクロールしたいので、使用するメソッドは、conversations.historyというものが適切だと考えます。
設定できるパラメータ
- token: 必須 - 取得したToken
- channel : 必須 - 取得したいSlackのワークスペースに含まれるChannel ID
- cursor: オプション - Next_token的なものがresponseに返ってくるので、ページングしたい時にresponseの(next_cursor)の値を入れるとページングされた結果が返される。
- inclusive: オプション - (defaultでは 0が設定されている) タイムスタンプが指定されている場合にのみ、最新または最古のタイムスタンプを持つメッセージを結果の境界を含むか含めないかを指定できる。
- latest: オプション - (defaultは現在時刻が入っている [UnixTime]) 結果に含めるメッセージの時間範囲の終了
- limit : オプション - (defaultは100) 返品するアイテムの最大数。ユーザー リストの最後に達していなくても、要求された数より少ないアイテムが返される場合があります。
- oldest: オプション - (defaultは0 [UnixTime]) 結果に含めるメッセージの時間範囲の開始。
Tokenの取得方法
- Tokenの取得なのですが、Legacy tokensの取得は非推奨の為、アプリベースのToken取得が必要になってきます。
① アプリの作成
-
https://api.slack.com/apps より、Slack APIにアクセスします。
② Permisionを指定する。
-
アプリを作成すると、下記のような画面「Basic Information」が表示されるので、右下にある、「Permission」を選択する。
-
スクロールしていき、「Scopes」までいったら、「User Token Scopes」の「Add an OAuth Scope」 に下記の内容を追記していきます。
設定するPermission
- 上記で指定したPermissionは、 conversations.historyで必要とするものになります。
③ Tokenを発行する。
- 最後に下記の「Install to Workspace」をクリックすると新規にTokenが払い出されます。
Pythonでの実装例
slack.py
import requests
SLACK_CHANNEL_ID = '指定したいChannelのID名を記載'
SLACK_URL = "https://slack.com/api/conversations.history"
TOKEN = "取得したTokenを記載"
def main():
payload = {
"channel": SLACK_CHANNEL_ID,
"oldest": "1622761200"
}
headersAuth = {
'Authorization': 'Bearer '+ str(TOKEN),
}
response = requests.get(SLACK_URL, headers=headersAuth, params=payload)
json_data = response.json()
msgs = json_data['messages']
return print(msgs)
if __name__ == "__main__":
main()
参考文献