器用貧乏です。はげたかです。日記です。

どうも、はげたかです。今まで器用貧乏に生きてきました。ジェネラリスト・フルスタックエンジニアを目指しています。

今日の一言:カテゴリ分けをしっかりしたらPVあがるかな?

Slackに分ぽうを綴り、日報を作成する。メッセージ取得編

概要

きっかけ

Slack に分報を書こうかなと思い、せっかくだし分報をためて日報を Slack に貯めようと思った。

分報チャンネル => 日報チャンネル Slack#分報 => Slack#日報

思ったこと・感じたことを分報にし、本日分のメッセージを取得して日報にするという仕組みなのだが、作ってて必要なのか、と思い始めた。

メモ・ログみたいなのは重要だと思うのだが結局、Slack という流れるチャットに投稿するだけ…。単純に振り返りたいなら分報を見直せばよいのでは…。

Slackではなく、Evernote に貯めればよいのかな…。もう一度考え直そう。

とりあえず、Slackのメッセージを取得するまでのプログラムを書いたので共有する。

ソースコード

とりあえずテスト用なので、github にもあげるほどでもないです。

#!/bin/ruby
# Slack のメッセージを取得する

require 'slack' # gem install slack-api 
require 'json'
require 'time'

# https://api.slack.com/docs/oauth-test-tokens
SLACK_ACCESS_TOKEN = {{YOUR_ACCESS_TOKEN}}
# not channel id(C****).
# ex) general
SLACK_CHANNEL_NAME = {{YOUR_CHANNEL_NAME}}

# Slack.configure に token を設定
Slack.configure do |config|
  config.token = SLACK_ACCESS_TOKEN
end

# Message Class
class Message
  attr_reader :username, :text, :channel, :timestamp

  def initialize(obj)
    @username = obj["username"]
    @text = obj["text"]
    @channel = obj["channel"]["name"]
    @timestamp = obj["ts"]
  end

  def put_message()
    time = Time.at(@timestamp.to_i()).strftime("%T")
    "[#{time}]: #{@text}"
  end

end

# fetch_today_channel_message
# Slack API を用いて、本日のメッセージを取得する
def fetch_today_channel_message()
  client = Slack.client
  # 昨日の日付を取得 => 本日付のデータが取得できる(?)
  # API仕様がわからず
  query = "on:" + (DateTime.now - 1).strftime('%Y-%m-%d') + " "
  option = {
      :query => query,
  }
  res = client.search_all(option)
end

json = fetch_today_channel_message()
target_messages = json["messages"]["matches"].select{|k| k["type"] == "message" }

messages = []
target_messages.each do |message|
  messages.push(Message.new(message))
end

messages.select{|m| m.channel == SLACK_CHANNEL_NAME}.reverse.each do |mm|
    puts mm.put_message
end

実行結果

$ ruby slack-daily-report-for-public.rb
[11:57:19]: slack で日報を作成する
[12:30:07]: slack-api 分かりづらい。

<https://api.slack.com/methods/search.messages>

query で色々取得できるかと思ったけど、何がなんだかさっぱり。
コピペでゲットした、 `“on:2017-02-27 “ `しか使えない
[12:47:59]: そもそも、分報 =&gt; 日報にする意味、振り返るだけなら slack を見れば良いじゃないか…

仕事の日報は進捗報告だから、この分報使えないだろうな〜。

Slack入門 [ChatOpsによるチーム開発の効率化]

Slack入門 [ChatOpsによるチーム開発の効率化]

たのしいRuby 第5版

たのしいRuby 第5版