trello APIでカードの名前を取得してみる

はじめに

kanban 系のタスク管理ツールを探していて会社の人に教えてもらいました。
これは結構良さそうだったので、いつもどおりタスク管理ツールからタスクを抜き出すスクリプトを書いてみました。

環境

  • ruby 2.2.3p173
  • MAC OS X (El Capitain)
    ※ windowsでも多分動くと思うのですが

API tokenは事前に取得している前提です

コード

先に書いたコードを記載します。

require 'open-uri'
require 'json'
module MyTrello
class Task
def initialize(name, key, token)
@name = name
@key = key
@token = token
end
def boards
responce = open(boards_url)
code, message = responce.status
if code == '200'
@json = JSON.parse(responce.read)
end
# @json
end
def lists(boardname)
@boardname = boardname
boards
board_id
responce = open(lists_url)
code, message = responce.status
if code == '200'
@listjson = JSON.parse(responce.read)
end
end
def cards(boardname, listname)
@boardname = boardname
@listname = listname
lists(boardname)
list_id
responce = open(cards_url)
code, message = responce.status
if code == '200'
@cardjson = JSON.parse(responce.read)
end
@cardjson
end
def cardnames(boardname, listname)
cards(boardname, listname).collect do |card|
card['name']
end
end
private
def board_id
@json.each do |board|
if board['name'] == @boardname
@board_id = board['id']
end
end
end
def list_id
@listjson.each do |list|
if list['name'] == @listname
@list_id = list['id']
end
end
@list_id
end
def boards_url
"https://trello.com/1/members/#{@name}/boards?key=#{@key}&token=#{@token}"
end
def lists_url
"https://trello.com/1/boards/#{@board_id}/lists?key=#{@key}&token=#{@token}"
end
def cards_url
"https://trello.com/1/lists/#{@list_id}/cards?key=#{@key}&token=#{@token}"
end
end
end
こんな感じです。
単純ですね。
使い方
pryでrequireして例で出します。
そして今回取り出すデータ元はこんな感じです。
スクリーンショット 2015-10-29 0.01.07
$ pry -r ./mytrello.rb
mytrello.rbは上記コードが書いてあるファイルです
とりあえずイニシャライズします。
[4] pry(main)> name  = "username"
=> "username"
[5] pry(main)> key = "000000000000000000000000000000"
=> "000000000000000000000000000000"
[6] pry(main)> token = "1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a"
=> "1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a"
[7] pry(main)> trello = MyTrello::Task.new(name, key, token)
=> #<MyTrello::Task:0x007fe47486a488
@key="000000000000000000000000000000",
@name="username",
@token=
"1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a">
key, name, tokenの値は各自のものを入れます。
つづいて実際に実行してみます。用意しているコマンドは以下です。
すべて、インスタンスメソッドです。
  • boards
  • ボード一覧のjsonデータを出します
  • lists(boardname)
  • リスト一覧のjsonデータを出します
  • cards(boardname, listname)
  • カード一覧のjsonデータを出します
  • cardnames(boardname, listname)
  • カード一覧の名前を配列で返します。
実際のイメージです。
boards
pry(main)> trello.boards
=> [{"name"=>"Doing",
"desc"=>"",
"descData"=>nil,
"closed"=>true,
"idOrganization"=>"56306c68cd4e76bda747e2c7",
"pinned"=>nil,
"invitations"=>nil,
"shortLink"=>"aibKU27g",
"powerUps"=>[],
"dateLastActivity"=>nil,
"idTags"=>[],
"id"=>"56306dafd00fd151baf7edbf",
"invited"=>false,
"starred"=>false,
"url"=>"https://trello.com/b/aibKU27g/doing",
"prefs"=>
{"permissionLevel"=>"private",
"voting"=>"disabled",
"comments"=>"members",
boards collectしてみる
trelloがjsonで介してくれるので、これをいじっていけばいい感じにいけますよね。
[13] pry(main)> trello.boards.collect{|board| board['name']}
=> ["Doing",
"In Progress",
"Tasks",
"Welcome Board",
"あまりにも秘密のプロジェクト"]
lists
[15] pry(main)> trello.lists("あまりにも秘密のプロジェクト")
=> [{"id"=>"56306e48cd95adfabb7d3fa1",
"name"=>"In Progress",
"closed"=>false,
"idBoard"=>"56306e3d0220e708273b8c6b",
"pos"=>65535,
"subscribed"=>false},
{"id"=>"56306e4f54ac86c9201683f1",
"name"=>"Doing",
"closed"=>false,
"idBoard"=>"56306e3d0220e708273b8c6b",
"pos"=>131071,
"subscribed"=>false},
{"id"=>"56306e5230ac095b026eaa84",
"name"=>"Done",
"closed"=>false,
"idBoard"=>"56306e3d0220e708273b8c6b",
"pos"=>196607,
"subscribed"=>false}]
listsをcollectしてみる
[16] pry(main)> trello.lists("あまりにも秘密のプロジェクト").collect{|list| list['name']}
=> ["In Progress", "Doing", "Done"]
cards
[17] pry(main)> trello.cards("あまりにも秘密のプロジェクト", "In Progress)=> [{"id"=>"56306ff0800225dd8f7bb59a",
"checkItemStates"=>[],
"closed"=>false,
"dateLastActivity"=>"2015-10-28T06:49:24.639Z",
"desc"=>"",
"descData"=>nil,
"idBoard"=>"56306e3d0220e708273b8c6b",
"idList"=>"56306e48cd95adfabb7d3fa1",
"idMembersVoted"=>[],
"idShort"=>5,
"idAttachmentCover"=>nil,
"manualCoverAttachment"=>false,
"idLabels"=>[],
"name"=>"どうしようもなく秘密のラベリングを考える",
"pos"=>131071,
"shortLink"=>"9Ml4KdoQ",
"badges"=>
{"votes"=>0,
"viewingMemberVoted"=>false,
"subscribed"=>true,
"fogbugz"=>"",
"checkItems"=>0,
"checkItemsChecked"=>0,
"comments"=>0,
"attachments"=>0,
"description"=>false,
"due"=>nil},
"due"=>nil,
nameばっかりで芸が無いので。
[18] pry(main)> trello.cardnames("あまりにも秘密のプロジェクト", "In Progress")=> ["どうしようもなく秘密のラベリングを考える",
"trelloでタスク管理すればみんな幸せなのに!",
"これで会話してるみたいに見える?"]
という風にできる感じをチョロっと書いてみました。
終わりに
WunderlistのAPIもそうですが、簡単にjson形式でデータが抜き出せるのでこれを別なところに連携するということあ比較的用意です。私の場合は日報を書くのが手間なので、普段の仕事をタスク管理ツールで行って、そこで完了した作業を少し加工して使用します。今回のコードで言うと
trello.cardsname(boardname, listname).collect{|cardname| "■ #{cardname}"}.sort
とかして、タスク自体にグルーピングした名前とかつけて投げるだけみたいなことをしてます。