【30分で動かすシリーズ】TrelloにAPIを使ってカードの起票や取得をしてみる

記事タイトルとURLをコピーする

みんな大好きタスク管理ツールTrelloは、ユーザインタフェースが使いやすく、見てすぐ使いこなせます。
Trello00
ウェブ画面でさくさく使えますが、自動化や他サービスとの連携を考えるとプログラムで操作できると良い感じです。
TrelloにはAPIが用意されていて、プログラムからAPIを発行するとウェブ画面で操作するのと同じことができます。
これを試してみました。 

 

 

準備

APIを発行するには、IDやパスワードの代わりになるキーとトークンの取得が必要です。
これらをまず取得します。

Trelloにログインしておきます。

https://trello.com/1/appKey/generate

にアクセスします。すると、キーが表示されますので、これをメモっておきます
Trello02

https://trello.com/1/authorize?key=(取得したキー)&name=&expiration=never&response_type=token&scope=read,write

にアクセスします。
下記のような画面が表示されるので、「Allow」をクリックします。
Trello03

下記のようにトークンが表示されますので、これをメモっておきます。
Trello04

このキーとトークンを使い、APIを発行してTrelloにカード起票などを行ないます。

 

 

カードを起票するまでやってみる

ボードとリストは下記のような状態です。
Trello01
「未着手」リストにカードを起票するまでをやってみます。

 

ボード一覧を取得してリスト一覧を取得する

「どのボードのどのリストにカードを起票するか」 を行なうため、ボードのIDとリストのIDが必要です。
これらのIDをAPIを発行して取得します。

$ curl "https://trello.com/1/members/maedatomohiro/boards?key=(キー)&token=(トークン)&fields=name" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   305  100   305    0     0    221      0  0:00:01  0:00:01 --:--:--   221
[
:
:
  {
    "name": "前田タスク",
    "id": "57315cc146bf8f615b662ba9"
  },
:
:
]


ボードのIDは「57315cc146bf8f615b662ba9」と分かりました。

 

ボードにあるリストの一覧を取得

ボードのIDをURLに埋め込んでそのボードにあるリストの一覧を取得します。

$ curl "https://trello.com/1/boards/57315cc146bf8f615b662ba9/lists?key=(キー)&token=(トークン)&fields=name" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   157  100   157    0     0    190      0 --:--:-- --:--:-- --:--:--   190
[
  {
    "id": "57315d66980bb80dfb51df6e",
    "name": "未着手"
  },
  {
    "id": "57315d74e72aacfa5bdaf627",
    "name": "作業中"
  },
  {
    "id": "57315d78cb6ebdf031c2ce7f",
    "name": "完了"
  }
]


「未着手」リストのIDは「 57315d66980bb80dfb51df6e」と分かりました。

 

メンバのIDを調べる

カードには担当者を示すメンバを登録できます。ボードに居るメンバの一覧を取得し、IDを調べます。

$ curl "https://trello.com/1/boards/57315cc146bf8f615b662ba9/members?key=(キー)&token=(トークン)" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    81  100    81    0     0    109      0 --:--:-- --:--:-- --:--:--   109
[
  {
    "id": "551b4f5b19a8a6363ca1940c",
    "fullName": "Maeda",
    "username": "maedatomohiro"
  }
]


メンバ「Maeda」のIDは「 551b4f5b19a8a6363ca1940c」と分かりました。

 

カードを起票するスクリプトを用意する

ここまでのIDを使ってカードを起票してみます。
起票はスクリプトをざっくり作ってやってみます。いろんな言語のライブラリがありますが、今回はPythonでやってみます。

#coding:utf-8
from trello import TrelloApi
# import json
import simplejson as json
import pytz
from datetime import datetime

# Key Token
trello = TrelloApi('キー', 'トークン')

# List ID   上記で調べたボードIDから調べたリストID
listid = '57315d66980bb80dfb51df6e' # 未着手
# listid = '57315d74e72aacfa5bdaf627' # 作業中
# listid = '57315d78cb6ebdf031c2ce7f' # 完了

# Card Name
cardname = '新しいタスク'

# Card Description
desc = '新しいタスクの内容です。1行目n新しいタスクの内容です。2行目n新しいタスクの内容です。3行目n'

card = trello.cards.new(cardname, listid, desc)
carddump = json.dumps(card, indent=2, ensure_ascii=False)
# print(carddump.encode('utf-8'))
cardjson = json.loads(carddump.encode('utf-8'))
cardid = cardjson['id']
cardurl = cardjson['url']
print cardid
print cardurl

# Add Labels
trello.cards.new_label(cardid,'green')

# Set Due   カードの期限の設定 UTCで管理されるので日本時間からUTCに変換して設定している
utc = pytz.timezone('UTC')
jst = pytz.timezone('Asia/Tokyo')
jst_dt = datetime(2016, 5, 15, 17, 00, tzinfo=jst)
trello.cards.update_due(cardid, jst_dt.astimezone(utc))

# Add Member  上記で調べたメンバのID 複数人登録したい場合はnew_memberを人数分記載する
trello.cards.new_member(cardid, '551b4f5b19a8a6363ca1940c') # Maeda

# Add Comment
cardcomment = 'コメントを追加'
trello.cards.new_action_comment(cardid, cardcomment)

 

スクリプトを動かして起票してみる

スクリプトを動かしてみます。
スクリプトでprintで記載しているようにカードIDとカードの直リンクを出力しています。

$ python createcard.py
57317319460b6362dfbeb02d
https://trello.com/c/GfSiCStr/1--

 

 起票されたようです。ウェブで確認してみます。
Trello05
 
Trello06
無事カードが起票されました。 

 

 

リストにあるカードを取得する

どれだけカードがあるか(残タスクがあるか)を取得してSlackで通知するなどのシチュエーションがあるかと思います。
これができるようにカードの一覧を取得してみます。

$ curl "https://trello.com/1/lists/57315d66980bb80dfb51df6e/cards?key=(キー)&token=(トークン)" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1052  100  1052    0     0    754      0  0:00:01  0:00:01 --:--:--   754
[
  {
    "id": "57317319460b6362dfbeb02d",
    "checkItemStates": null,
    "closed": false,
    "dateLastActivity": "2016-05-10T05:35:25.445Z",
    "desc": "新しいタスクの内容です。1行目n新しいタスクの内容です。2行目n新しいタスクの内容です。3行目n",
    "descData": null,
    "idBoard": "57315cc146bf8f615b662ba9",
    "idList": "57315d66980bb80dfb51df6e",
    "idMembersVoted": [],
    "idShort": 1,
    "idAttachmentCover": null,
    "manualCoverAttachment": false,
    "idLabels": [
      "57315cc1b0dfecc6d13bc41e"
    ],
    "name": "新しいタスク",
    "pos": 16384,
    "shortLink": "GfSiCStr",
    "badges": {
      "votes": 0,
      "viewingMemberVoted": false,
      "subscribed": true,
      "fogbugz": "",
      "checkItems": 0,
      "checkItemsChecked": 0,
      "comments": 1,
      "attachments": 0,
      "description": true,
      "due": "2016-05-15T08:00:00.000Z"
    },
    "due": "2016-05-15T08:00:00.000Z",
    "idChecklists": [],
    "idMembers": [
      "551b4f5b19a8a6363ca1940c"
    ],
    "labels": [
      {
        "id": "57315cc1b0dfecc6d13bc41e",
        "idBoard": "57315cc146bf8f615b662ba9",
        "name": "",
        "color": "green",
        "uses": 1
      }
    ],
    "shortUrl": "https://trello.com/c/GfSiCStr",
    "subscribed": true,
    "url": "https://trello.com/c/GfSiCStr/1--"
  }
]


API発行の結果はJSONで返されますので、あとは、カードのタイトルとURLをJSONからうまいこと抜いて、カードのメンバーから人を特定して、Slackで通知するとかちょっとがんばればできそうです。

 

 

終わりに

TrelloのAPIにはTrelloを操作するための命令がひととおり揃っています。
上記のようにcurlで叩いて気軽に何かできたりしますので、使いやすく試しやすいです。
もし、Trelloをお使いでしたら試してみてはいかがでしょうか。