読者です 読者をやめる 読者になる 読者になる

Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

BitBarとesaを連携してニッポーのタスクリストをOS Xのメニューバーに表示する

BitBar esa.io

f:id:tbpg:20160603010130j:plain

BitBarとesaを連携してニッポーのタスクリストをOS Xのメニューバーに表示してみます。

BitBarとは?

BitBarはスクリプトとして実行可能なプログラムの標準出力をMacのメニューバーに表示するアプリケーションです。
rebuild.fm で紹介されたことによって一気に広まったように思います。

github.com

コード

ニッポーはテンプレートを利用して同じ階層に作成されるものとします。
esaAPIのpostsが更新日の降順のため、最初の1件を取得すればもっとも新しい日のニッポーを取得できます。

rubyで実装しました。
shebangは各自の内容に合わせて変更してください。

#!/usr/bin/env /Users/user name/.anyenv/envs/rbenv/shims/ruby

require 'esa'

module ESA
  TEAM = "your team"
  ESA_API_TOKEN = "your token"
end

client = Esa::Client.new(access_token: ESA::ESA_API_TOKEN, current_team: ESA::TEAM)

# クエリ条件は各自のニッポーによって変わる
diary = client.posts(q: 'category:個人/your name/日記').body['posts'][0]
regex = /\- (\[[ |x]\] .+)/
tasks = diary["body_md"].scan(regex)
ret = tasks.map do |v|
  e =  v.first
  if e.include?("[x]")
    e = "#{e.chomp} | color=gray"
    e.gsub(/\[x\]/, ":large_blue_circle:")
  else
    e = "#{e.chomp} | color=black"
    e.gsub(/\[ \]/, ":red_circle:")
  end
end

total = ret.size
done = ret.count {|e|e.include?(":large_blue_circle:") }
rest = total - done

puts ":pencil:Todos #{done} / #{total}"
puts "---"
puts ":baby_chick: #{diary['full_name']} | href=https://#{ESA::TEAM}.esa.io/posts/#{diary['number']} | color=blue"
puts "---"
puts ret.sort.join("\n")

デモ

終わってるタスクは青丸 :large_blue_circle: で。
未完了のタスクは赤丸 :red_circle: で表示されます。
日記のタイトルは esa の記事へのリンクになっています。

f:id:tbpg:20160603010158p:plain