Answers:
是的,它使用了Trello API和其他一些工具。
此答案依赖于HTTPie和jq,这两个可免费使用的工具,如果您使用的是Mac ,则可以通过pip和Homebrew安装:
$ pip install httpie
$ brew install jq
使用HTTPie
我们可以查询Trello API以获取电路板的原始操作提要,然后可以jq
将其转换为有用的数据。
让我们从“简单”开始。以下命令将为我们提供2013年4月在Trello开发委员会上发表的所有评论。我将在稍后解释:
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提出了请求4d5ea62fd76aa1136000000c
-我通过访问https://trello.com/dev并查看ID来实现这一点,Trello附加到完整URL(https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c
)后面。
该since
和before
字段是不言自明的。我指定一个limit
,1000
因为这是Trello允许的最大响应。如果您的委员会在相关日期范围内有超过一千条评论,则此处将需要更复杂的分页解决方案。我指定一个filter
,commentCard
因为我仅对这些答案感兴趣。如果需要更多操作类型,请指定以逗号分隔的列表,例如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)
[[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
遍历数组并将其应用于{date, member: .memberCreator.fullName, comment: .data.text}
每个单独的动作对象,将它们按摩成有用的东西。
{date}
是一样的{date: date}
来jq
。所以你有它。嗯,希望如此。我们可以使用任何脚本语言来进行此数据按摩,但这正是其jq
目的所在,因此,这是学习一个很棒的新工具的好借口。查阅jq手册以了解更多信息。
现在,这是可行的,因为Trello开发委员会是公开的。但是,如果我们要私人数据怎么办?
在正确的做到这一点,是产生的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密钥/令牌生成步骤。
现在修改一下,以所需的格式获取所需的精确数据。