【Python】slackチャンネル内全メッセージ取得Pgm<TokenとChannelID2か所コピペで動く>

slackへ送信するのは、WebhookのURLをslack apiで取得すれば一発でOKだったのですが、
slackメッセージのpythonへの読み込みは、結構、難しかったです。
システムの試験稼働動画です。

●訳がわからないまま、サンプルプログラムを走らせてみました。
 サンプルプログラムは、いろいろなブログ記事があって、どれも凝ったものが多く解読するのも難儀なのですが
estie社様サンプルに感謝
estie社のブログ記事のサンプルは、シンプルでこれならできそうだということで使わせていただきました。
1分以内のSlackメッセージの取得
https://www.estie.jp/blog/entry/2022/11/08/110000

この前に、その1その2その3 がありますが、読んでも訳が判りませんでした。すみません。

①estieオリジナルコード
  AppのToken番号と対象となるチェンネルの番号を記入するだけで、txtをprint出力してくれます。
ただし、過去1分以内のメッセージのみで、古いメッセージは読んでくれません。

import requests
import time
url = "https://slack.com/api/conversations.history"
token = "xoxb-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxx..."  # tokenを入れてください

header={
    "Authorization": "Bearer {}".format(token)
}

payload  = {
    "channel" : "C0123456789",  # Conversation IDを入れてください
    "oldest" : (time.time() - 60)
}

res = requests.get(url, headers=header, params=payload)

json_channel_history = res.json()
for message in json_channel_history["messages"]:
    print(message["text"])

②私の学習用に変更させていただいたコード
変更1:過去時間60秒制限を外して、全メッセージを読み込む
変更2:受信したjasonをtextに取り出したものをlistにアペンドして、メッセージに番号をつけてprint
短いので、GISTにコードアップしません。

importrequests
importtime
url = “https://slack.com/api/conversations.history”
#url = “https://slack.com/api/conversation_archive”
token = “xoxb-xxxxxxxx-yyyyyyyyyyyy-zzzzzzzzzzzzzzzzzzzz” # tokenを入れてください
header={ “Authorization”: “Bearer {}”.format(token) }
payload ={“channel” : “Cxxxxxxxx”}    # チャンネルID 記入   過去時間制限外す,”oldest”:(time.time() -60)} #
res = requests.get(url,headers=header,params=payload) 
json_channel_history = res.json()
list_mes=[]
i=0
for message in json_channel_history[“messages”]:
        txts=message[“text”]
        #print(txts)
        list_mes.append(txts)
#mesarray=list_mes.split(‘,’)
for i in range(0,len(list_mes)):
        print(i,”:”,list_mes[i])

このコードをはしらせると 新しいメッセージ順に<送り主のID>メッセージ文 が受信できました。

 

ユーザー名のIDをどうするかは、未だですが、私のプロジェクトでは、ユーザー名は匿名でいいので、記号でもかまいません。

●チャンネルIDの取得
これは、slackアプリ本体で、チャネルの詳細で見れます。SLACK画面の左のメニュにあるチャンネル名右クリック
  チャンネル詳細を表示すると クリック

チャンネル詳細ウィンドウがでてきて チャンネル情報の一番下に チャンネルIDがあります。

 

●slack api アプリのtoken
注意:tokenは、暗号文ですので、絶対人に見せたり、公開してはいけません。見られたらワークスペースを潰しましょう。放っておくとワークスペース丸見えになってしまいます。

①アプリを作成して、アプリで使う
②scopeで機能選択=>スコープは、Web API メソッドの呼び出しや Events API のイベントの受信といった Slack での機能を実行する権限をアプリに付与するために使用します今回は、channels:historyだけで機能します。
 scopeの一覧はこちらhttps://api.slack.com/scopes

③scopeで機能を使う権限を指定したら、この機能をアプリにインストールします。

●操作手順
  長い手順ですが、1回やれば、終わりです。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です