はい、Trello APIと他のいくつかのツールを使用しています。
この答えは、HTTPieとjqに依存しています。これは、Macを使用している場合、pipとHomebrewを介してインストールできる2つの自由に利用できるツールです。
$ pip install httpie
$ brew install jq
を使用しHTTPie
てTrello APIにクエリを実行し、ボードの生のアクションフィードを取得できますjq
。次に、そのデータを有用なものに変換するために使用できます。
「簡単な」ものから始めましょう。次のコマンドは、2013年4月にTrello Dev Boardで行われたすべてのコメントを提供します。これについては、後で説明します。
http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard" | jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'
すべてが計画どおりに進んだ場合、次のようになります。
{
"Embed All The Things (516fcff9b998572923008fb2)": [
{
"comment": "Embed.ly now supports https better, so maybe we can upgrade to that version. http://embed.ly/embed/security/ssl",
"member": "Brett Kiefer",
"date": "2013-04-26T16:15:21.408Z"
},
{
"comment": "Embedding a Google Map would be nice.",
"member": "Michael Warkentin",
"date": "2013-04-24T18:39:12.155Z"
},
{
"comment": "Github issues / pull requests",
"member": "Michael Warkentin",
...
涼しい。これは、他の任意の数のフォーマットに簡単に解析できる単一の妥当なJSONオブジェクトです。それでは、必要に応じて修正するのに十分理解できるように、ステップを進めていきましょう。
http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard"
これはTrelloに依存する唯一の部分です。IDのあるボードのパブリックAPIに対してリクエストを行います。https: //trello.com/dev 4d5ea62fd76aa1136000000c
にアクセスして、Trelloが完全なURLに追加するID(https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c
)を確認することでそれを取得しました。
since
そしてbefore
フィールドは自明です。を指定したのlimit
は1000
、Trelloが許可する最大の応答だからです。ボードの関連する日付範囲に1,000を超えるコメントがある場合、ここではより複雑なページングソリューションが必要になります。私はこの回答の目的のためにそれらにのみ興味filter
があるcommentCard
ので、私はof を指定します。より多くのアクションタイプが必要な場合は、などのカンマ区切りリストを指定しますfilter==commentCard,updateCard:idList,createCard
。有効なアクションタイプはTrello APIリファレンスにあります。
それを単独で実行すると、理解するのが比較的難しい多くの情報が得られます。パイプjq
を使って、もう少し便利なものにマッサージします。
jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'
部分jq
ごとに、スクリプトは次の変換を行っており、それぞれが次の演算子に結果をパイプしています。
group_by(.data.card.id)
- Trelloは一連のアクションを提供するだけです。これを配列の配列に変換し、各サブ配列には特定のカードのアクションのみが含まれます。基本的に
[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
- 配列の配列は必要ありません。フォームのオブジェクトが必要です
{ card1: [action1, action2, ...], card2: [action1, action2, ...], ...}
。配列をキーと値のペアの配列に変換することで、それをfrom_entries
オブジェクトに変換するために使用できます。涼しい。
- 今、私が
KEY_EXPRESSION
上で呼んだものを見てみましょう:(.[0].data.card | "\(.name) (\(.id))")
- これはかなり簡単です。カードエントリは最初のアクションから取得します(すべてのアクションで同じである必要があるため、何を選択してもかまいませんが、最初のアクションは正解のようです)。次に、文字列補間(
\(...)
)を使用して、次のようなものを作成します"name (id)"
。
VALUE_EXPRESSION
です map({date, member: .memberCreator.fullName, comment: .data.text})
.
すべてのアクションの配列を変更せずに使用することもできます。しかし、アクションはやや醜いので、map
配列をpingして{date, member: .memberCreator.fullName, comment: .data.text}
個々のアクションオブジェクトに適用することで、アクションを有用なものにマッサージしています。
{date}
同じである{date: date}
とjq
。
- 他のすべてはかなり自明です。これで、日付、メンバー(名前だけですが、簡単に取得できます)、およびコメントのテキストを取得できました。
だからあなたはそれを持っています。ええと、うまくいけば。このデータマッサージを任意のスクリプト言語で行うことはできましたが、これはまさにjq
そのために構築されたものであるため、クールな新しいツールを学ぶための良い言い訳です。詳しくは、jqのマニュアルをご覧ください。
現在、これはTrello Dev Boardが公開されているため機能します。しかし、プライベートデータが必要な場合はどうでしょうか。
これを行う正しい方法は、APIトークンを生成することです。TrelloのAPIは、ガイドはじめにこれを行う方法の詳細runthroughを持っています。しかし、私たちは急いでいるので、怠惰な人のやり方でやります...
Chromeでhttp://trello.comにログインし、コンソールを開きます([表示]> [開発者]> [JavaScriptコンソール])。$.cookie('token')
ウィンドウに入力します。これはのようなものを吐き出します"uniquememberid/somegarbledstring"
。引用符の間の部分をコピーし、リクエストを次のように変更します。
http GET "https://api.trello.com/1/boards/THE_ID_OF_THE_PRIVATE_BOARD_YOU_WANT/actions" "Cookie:token=uniquememberid/somegarbledstring" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard" | jq ...
変更したのは"Cookie:token=uniquememberid/somegarbledstring"
ヘッダーの追加だけです。これにより、Trelloはトークンを使用します。そのトークンは非常にプライベートであることに注意してください...他の人にトークンを渡した場合、Trelloアカウントページで取り消すまで、基本的にあなたと同じようにログインできます。ですから、ご注意ください。または、APIキー/トークン生成ステップを実行します。
次に、変更を加えて、必要な形式で必要な正確なデータを取得します。