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
linuxのfind -mtimeの挙動で失敗したのでメモ
今回はlinuxのfindコマンドのmtimeオプションで失敗したのでメモするために書きました。
今回失敗したこととしては、ファイルの削除cronを回しているときにfindコマンドを使って-mtimeオプションで時間を指定して削除処理をおこなっていました。 しかし、消しては行けないフォルダまで消してしまったので色んな問題が発生しました。
本題
- これが初期状態です。
[vagrant@localhost test]$ ll -a memo/ total 8 drwxrwxr-x 2 vagrant vagrant 4096 Feb 2 2002 . drwxrwxr-x 3 vagrant vagrant 4096 Jan 14 18:50 .. -rw-rw-r-- 1 vagrant vagrant 0 Jan 14 18:45 aaaa.txt -rw-rw-r-- 1 vagrant vagrant 0 Jan 14 18:45 bbb.txt
- 削除処理を実行
[vagrant@localhost test]$ find memo/ -mtime -1 | xargs rm -rf
- 削除結果
[vagrant@localhost test]$ ls -a memo/ . ..
ここまでは想定通りの結果だったので問題なかったのですが、問題は次の処理になります。
[vagrant@localhost test]$ ls -a memo/ . .. [vagrant@localhost test]$ ll -a total 12 drwxrwxr-x 3 vagrant vagrant 4096 Jan 14 19:05 . drwx------. 5 vagrant vagrant 4096 Jan 14 18:50 .. drwxrwxr-x 2 vagrant vagrant 4096 Feb 2 2002 memo
- memoフォルダが空になっている状態で下記の処理を実行すると
[vagrant@localhost test]$ find memo/ -mtime -1 | xargs rm -rf
[vagrant@localhost test]$ ll -a total 8 drwxrwxr-x 2 vagrant vagrant 4096 Jan 14 19:01 . drwx------. 5 vagrant vagrant 4096 Jan 14 18:50 ..
なんと!!! memoフォルダまで消えてしまいました・・・・orz
補足
補足ですが上記のケースを回避するには
フォルダを指定するときに*を指定してやれば・・・
[vagrant@localhost test]$ find memo/* -mtime -1 | xargs rm -rf find: `memo/*': No such file or directory
[vagrant@localhost test]$ ll -a total 12 drwxrwxr-x 3 vagrant vagrant 4096 Jan 14 19:05 . drwx------. 5 vagrant vagrant 4096 Jan 14 18:50 .. drwxrwxr-x 2 vagrant vagrant 4096 Feb 2 2002 memo
この通りフォルダは削除されずに済みます!
いやー、知らない事がいっぱいあると再度実感したました。
resqueのworkerがoverviewで表示されるのにサーバ側ではプロセスが存在しないから調べてみた
resqueのoverviewでよく分からないworkerが存在していたので、killしようと奮闘していた話です。 ドキュメント残すついでに書いてみました。
発見時
サーバでプロセスを確認
ps aux | grep resque
おらんやん!!
なんやこのプロセス・・・・
調べてもよく分からなかったので、友人に相談・・・
「redisにkey残ってるだけじゃね?」と言われたので、
redisの中を見てみると・・・・!?
redis-cli keys keys resque*
おったー!!!
結論
redisのkeyに残っており、それが表示されてたみたいです。
まだまだredisとresqueについての知識(ggr力も)がまだまだ足りてないなと反省しました。
教えてくれた友人に感謝してますmm
nginxのアップロードモジュールを使ってみた
大容量のファイルを扱うことがあったので、どうしようかなと調べているとnginxに便利なモジュールがあったので紹介します!!
入れてみて感じたメリット
細かいことはあまりわかっていませんが、1Gのメモリしか積んでいないマシンに1.5Gほどのファイルをアップロード出来たのでめっちゃ感動しました!!
インストール
mkdir /usr/local/src/nginx mkdir /usr/local/src/nginx-upload-module/ git clone https://github.com/nginx/nginx.git usr/local/src/nginx git clone -b 2.2 /usr/local/src/nginx-upload-module /usr/local/src/nginx-upload-module/ cd /usr/local/src/nginx configure auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf make -j4 make install
大体こんな感じで導入できます(細かい設定は各々やってください(nginxのコマンドを作ったり等))
設定ファイル
location {{ item.path }} { upload_pass @rails; proxy_connect_timeout 500; proxy_send_timeout 500; proxy_read_timeout 500; client_max_body_size 2G; upload_pass_form_field ".*"; upload_store /tmp/; upload_store_access user:rw group:rw all:rw; upload_resumable on; upload_set_form_field "$upload_field_name[filename]" "$upload_file_name"; upload_set_form_field "$upload_field_name[type]" "$upload_content_type"; upload_set_form_field "$upload_field_name[path]" "$upload_tmp_path"; upload_aggregate_form_field "$upload_field_name[md5]" "$upload_file_md5"; upload_aggregate_form_field "$upload_field_name[size]" "$upload_file_size"; upload_max_file_size 2G; }
導入時詰まったところ
アップロードモジュールのmasterは新しいnginxには対応してないみたいです。(全てのバージョンで確認はしていないので実際わかってないです。) 自分が入れたnginx/1.9.13では動かなかったです。しかしプルリクの2.2(アップロードモジュール)は動くみたいだったのでそれを使用すると上手く入れれました。
最後に
アップロードモジュールも結構古いので、将来的には動かなくなる可能性も高いので導入は自己責任でお願い致します。 個人的にはLuaとか使ってアップロードモジュールみたいなのを作るのが安定なのかなと思っています。(好みですが)
- 作者: 久保達彦,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る