Wunderlistに設定しているタスクを毎日(平日限定)slackに通知する流れを作ってみた
slackにタスクを毎日通知してくれるいい感じのツールが見つからなかったので、自作してみました。
必要なもの
- wunderlist
- タスクを管理している
- wunderline
- wunderlistをコマンドラインで実行できる
- node.js
- wunderlineをインストールするのに必要
- ruby
- 今回使用するスクリプト言語
- slack
- 通知先
- tokenの発行
- wunderlistのtoken
- slackのtoken
手順
※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