Slackの投稿データの一部を取得するという業務が発生したので、そのメモです。
スクリプト作成の環境構築
ディレクトリとファイルの作成
$ mkdir script
$ cd script
$ touch get_posts_from_slack.rb
bundlerの追加
参考:https://bundler.io/
$ bundle init
Gemのインストール
今回はシンプルに特定のチャンネルから投稿を取ってくるだけだったので、下記のslack-ruby-gemを使うことにしました。
https://github.com/aki017/slack-ruby-gem
Gemfileに下記を追記
※ rubocopも同時に入れてます
gem 'rubocop', require: false
gem 'slack-api'
Gemのインストール
$ bundle install
スクリプト作成
Slack側の設定
下記ページからアプリを作成
https://api.slack.com/apps
アプリの名前とそれを使うSlackのワークスペースを選択
Permissionsを設定していきます。
下記画面でPermissionsを選び、
Scopesを設定します。
今回は、パブリックチャンネルから投稿を取得するだけだったので、Access user’s public channelsを選択して、Saveします。
その後、OAuth Tokens & Redirect URLsからワークスペースにアプリをインストールします。
アプリをインストールすると、OAuth Access Tokenが発行されるのでメモしておきます。
Authのテスト
Authのテストします。 このファイル(test.rb)を作成して、先程の取得したTokenの値をYOUR_TOKENに入れます。
require 'slack'
Slack.configure do |config|
config.token = 'YOUR_TOKEN'
end
p Slack.auth_test
実行して、下記のようなJSONfが表示されていれば、アプリ設定doneです。
$ ruby test.rb
{"ok"=>true, "url"=>"YOUR_SLACK_URL", "team"=>"YOUR_TEAM", "user"=>"USER", "team_id"=>"TEAM_ID", "user_id"=>"USER_ID"}
あとは、slack-ruby-gemのexampleを参考にすると色々なデータが取れます。
https://github.com/aki017/slack-ruby-gem/tree/dev/examples
特定のattachmentの情報を取得
今回は、特定のattachmentから情報を取得したかったので、こんな感じのスクリプトを書きました。
一旦、普通にメッセージを取得して、返ってくるJSONをみつつ、書いていくと良いと思います。
require 'slack'
token = 'XXXX'
client = Slack::Client.new(token: token)
# 取得数のデフォルトは100なので、1000に変えています
messages = client.channels_history(channel: 'channel_id', count: 1000)['messages']
reg = /aaaaaa/
messages.each do |message|
text = message['attachments'][0]['text'] unless message['attachments'].nil?
if reg.match?(text)
user_name = message['attachments'][0]['title']
link = message['attachments'][0]['title_link']
puts "#{user_name}, #{link}"
end
end