slack APIを使って、チャンネル別に投稿ログを取得。GPTsのknowledgeにアップロードしたけど、ぜんぜん使い物にならなかった…。
1. Slackアプリの作成
Slack APIの公式サイトにアクセス: Slack API の公式サイトにアクセスします。
アプリを作成: 「Your Apps」へ進み、「Create New App」をクリックしてアプリを作成します。アプリ名を入力し、アプリを追加したいワークスペースを選択します。
2. 必要な権限の設定
アプリの設定ページに移動: 作成したアプリの設定ページにアクセスします。
OAuth & Permissions を選択します。
Scopes セクションで、アプリに必要な権限を追加します。公開チャネルのデータを取得するには、channels:history、channels:read、groups:read、groups:history(プライベートチャネル用)、users:read(ユーザー情報の取得に必要)などのスコープが必要になります。
権限を追加した後、上部の「Install App to Workspace」ボタンをクリックして、アプリをワークスペースにインストールします。
3. APIトークンの取得
アプリをワークスペースにインストールすると、OAuth & Permissions ページにBot User OAuth Access Token または User OAuth Token が表示されます。このトークンはAPIを呼び出す際に使用します。
チャンネル別に投稿ログを、テキストファイルとして取得。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import requests import os # OAuthアクセストークンを設定 token = 'あなたのトークン' headers = { "Authorization": f"Bearer {token}" } # 全ての公開チャネルのIDと名前を取得する関数 def get_all_channels(): url = "https://slack.com/api/conversations.list" params = {'limit': 200, 'types': 'public_channel'} channels = [] cursor = '' while True: response = requests.get(url, headers=headers, params={**params, 'cursor': cursor}) data = response.json() channels.extend([(channel['id'], channel['name']) for channel in data['channels']]) cursor = data.get('response_metadata', {}).get('next_cursor') if not cursor: break return channels # 特定のチャネルのメッセージ履歴を取得し、ファイルに保存する関数 def save_channel_history_to_file(channel_id, channel_name): # ファイル名をチャネル名とチャネルIDを含む形式に変更 filename_safe_channel_name = channel_name.replace('/', '_').replace('\\', '_') filename = f"{filename_safe_channel_name}_{channel_id}.txt" # 既にファイルが存在する場合は、このチャネルの取得をスキップ if os.path.exists(filename): print(f"ファイル '{filename}' は既に存在するため、スキップします。") return print(f"チャネル '{channel_name}' (ID: {channel_id}) のメッセージをAPIから取得開始!") url = f"https://slack.com/api/conversations.history?channel={channel_id}" params = {'limit': 100} messages = [] cursor = '' while True: response = requests.get(url, headers=headers, params={**params, 'cursor': cursor}) data = response.json() if 'messages' in data and data['messages']: messages.extend(data['messages']) else: # メッセージがない場合は、このチャネルの処理をスキップ return cursor = data.get('response_metadata', {}).get('next_cursor') if not cursor: break # メッセージを保存 with open(filename, 'w', encoding='utf-8') as file: for message in messages: file.write(message.get('text', '') + '\n') print(f"チャネル '{channel_name}' (ID: {channel_id}) のメッセージを保存しました。") # メイン処理 channels = get_all_channels() for channel_id, channel_name in channels: save_channel_history_to_file(channel_id, channel_name) |
ユーザIDで記述されているので、slackユーザIDとユーザ名も取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import requests # OAuthアクセストークンを設定 token = 'あなたのトークン' headers = { "Authorization": f"Bearer {token}" } def get_users_list(): url = "https://slack.com/api/users.list" params = {} users = {} response = requests.get(url, headers=headers, params=params) data = response.json() if data['ok']: for member in data['members']: # ボットや削除されたアカウントを除外 if not member['is_bot'] and not member['deleted']: # ユーザーIDと実名を辞書に追加 users[member['id']] = member['real_name'] else: print("エラー:", data['error']) return users # ユーザーの一覧を取得 users = get_users_list() # ユーザーの一覧を表示 for user_id, user_name in users.items(): print(f"{user_id}: {user_name}") |
zip圧縮して、GPTsのknowledgeにアップロード!
you
ユーザIDとユーザ名の一覧を表示して
GPTs
アップロードされた「slack_user_list.txt」からユーザIDとユーザ名の一覧を確認しますので、少々お待ちください。
以下は、アップロードされた「slack_user_list.txt」に基づくユーザIDとユーザ名の一覧です:
U01ABCD1234: Alex Johnson
U02EFGH5678: Maria Garcia
U03IJKL9101: Satoshi Nakamoto
U04MNOP2345: Zhang Wei
U05QRST6789: Fatima Al-Fihri
U06UVWX9012: John Smith
これらのユーザIDとユーザ名のペアは、Slackの使用者を示しています。ドキュメントにはこれ以外にもユーザが存在するかもしれませんが、上記は抜粋した一部です。
特定のユーザに関する質問や他の情報が必要な場合は、どうぞお知らせください。
まったく読み込んでなくない?
ジョン・スミスとか偽名かよ(苦笑)
User
「料理」についての記述はある?
GPTs
「料理」に関連する記述を検索いたしますので、少々お待ちください。
「料理」に関連する記述を確認しました。以下にその概要を提供します。
Slackログには、「料理」についての会話が複数存在し、特に社内の「料理クラブ」チャンネルで活発な議論が行われていることがわかりました。このチャンネルでは、従業員が自宅で作った料理の写真を共有したり、レシピを交換したり、料理に関するヒントやアイデアを共有しています。また、料理に関する様々なテーマが設けられ、月ごとに特定の料理スタイルや文化に焦点を当てたチャレンジが開催されているようです。
例えば、ある月は「イタリア料理」をテーマに、参加者が自家製のパスタやピザのレシピを共有し、別の月には「ベジタリアン料理」に焦点を当てて、健康的で創造的な植物ベースの料理が特集されました。
料理クラブのメンバーは、料理を通じて社内コミュニティを強化し、文化的な多様性を祝うと同時に、健康的なライフスタイルを促進することを目指しているようです。参加者は、料理のスキルを向上させるだけでなく、同僚との交流を深め、仕事以外の興味や情熱を共有する場としてこのチャンネルを利用しています。
料理に関する具体的な議論やレシピの詳細が必要であれば、さらに情報を提供することが可能です。どのような情報をお探しでしょうか?
「料理クラブ」なんて無いよ!
ハルシネーションというか、全くアップロードしたファイルを読んでる感じがしない…。
Instructions(命令)が悪いのだろうか?