このエントリーをはてなブックマークに追加

Ruby

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-app
 

アプリの名前とそれを使うSlackのワークスペースを選択
 
slack-app-new
 

Permissionsを設定していきます。
下記画面でPermissionsを選び、
 
slack-permissions
 
Scopesを設定します。
今回は、パブリックチャンネルから投稿を取得するだけだったので、Access user’s public channelsを選択して、Saveします。

slack-scopes

 
その後、OAuth Tokens & Redirect URLsからワークスペースにアプリをインストールします。
slack-oauth

 
アプリをインストールすると、OAuth Access Tokenが発行されるのでメモしておきます。
slack-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

 

 

このエントリーをはてなブックマークに追加

© 2018, Udayan28