trello APIでカードの名前を取得してみる
Categories: ETC
はじめに
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して例で出します。 そして今回取り出すデータ元はこんな感じです。
$ 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
とかして、タスク自体にグルーピングした名前とかつけて投げるだけみたいなことをしてます。