下級エンジニアの綴

新しく発見したことを綴っていこうと思っています。夢はでっかく上級エンジニアになることです。

Wunderlistに設定しているタスクを毎日(平日限定)slackに通知する流れを作ってみた

slackにタスクを毎日通知してくれるいい感じのツールが見つからなかったので、自作してみました。

必要なもの

手順

※wunderlistにタスクが登録されている前提で進めていきます

node.jsのインストール
yum install epel-release
yum install nodejs npm
yum install gcc gcc-c++
wunderlineのインストール
npm install -g wunderline
rubyのインストール

下記サイトを参考にしてください(手抜きで大変申し訳ないですmm)

CentOS に Ruby をインストールする - kzy52's blog

実際のコード
#!/usr/bin/env ruby
require 'slack'
require 'json'

### confの内容
※confは下記のように定義しています
######################################
slack_token,slack_token
wunderlist_token,wunderlist_token
client_id,client_id
channel,channel
wunder_list_url,wunder_list_url
######################################

- slack_token          # slackに通知するためのtoken
- wunderlist_token     # wunderlistに通知するためのtoken
- client_id            # wunderlistのclient_id
- channel               # 通知したいslackのチャンネル
- wunder_list_url      # wunderlistで叩きたいapiのURL


conf_file_path = '/home/[ユーザー名]/slack_bots/schedule_conf.txt' # cronを実行するユーザーがfile openするので絶対パスがおすすめ

### confの取得
datas = []
begin
  File.open(conf_file_path) do |file|
    file.each_line do |line|
      datas.push(line.chomp!)
    end
  end
end

### 取得したconfをhash化する
scheduler = {}
datas.each do |data|
  ary = data.split(',')
  scheduler[ary.first] = ary.last
end

### wunserlistからjson形式でパラメータを取得
result = `curl -H "X-Access-Token: #{scheduler["wunderlist_token"]}" -H "X-Client-ID: #{scheduler["client_id"]}" #{scheduler["wunderlist_url"]}`

result = JSON.parse(result)

### slackで表示するために整形
tasks = []
result.each do |r|
  tasks.push(r["title"])
end

task_list = tasks.join("\n")

Slack.configure do |config|
  config.token = scheduler["slack_token"]
end

line = "---------------------------\n"
text = case Time.now.hour
       when 11 then "#{line} today tasks confirm \n #{line} #{task_list}"
       else
         'Error!!'
       end

Slack.chat_postMessage(text: text, channel: scheduler["channel"], link_names: true, username: 'scheduler')
cronに登録
$ cat /home/[ユーザー名]/slack_bots/config/schedule.rb
every '30 23 * * 1-5' do
  command '/home/[ユーザー名]/slack_bots/time_signal.rb'
end

$ bundle exec whenever --update-crontab

結果

出来たー!! 表示のさせかたはもう少し修正が必要ですが、とりあえず欲しい物は作れました。

気になってるところ

  • とりあえず動けば良い程度のコードになっているので、もっときれいに書き直したいですね。(curlを叩くところとか)
  • WunderlistのAPIを叩くためのtokenの発行の仕方が結構わかりにくかったので、もしかするとそこで結構詰まるかもしれないです・・・

参考リンク

タスク管理ツール WunderlistのAPIで遊んでみた - Qiita

Wunderlist をコマンドラインから操作する Wunderline - WebDelog

10分コーディング! Rubyでつくる Slack時報 | Money Forward Engineers' Blog