예, Trello API 및 기타 몇 가지 도구를 사용하고 있습니다.
이 답변은 Macie를 사용하는 경우 pip 및 Homebrew 를 통해 설치할 수있는 두 가지 무료 도구 인 HTTPie 및 jq 에 의존합니다 .
$ 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에 대해 요청 4d5ea62fd76aa1136000000c
합니다. https://trello.com/dev 로 이동 하여 전체 URL에 추가 된 Trello ID를 보면 알 수 https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c
있습니다.
since
및 before
필드 자명하다. Trello가 허용하는 가장 큰 응답이기 때문에 limit
of를 지정합니다 1000
. 보드가 관련 날짜 범위에서 천 개가 넘는 의견을 가지고 있다면 더 복잡한 페이징 솔루션이 필요합니다. 이 답변의 목적에만 관심 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)
- 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
때문에 배열 을 핑 {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 키 / 토큰 생성 단계를 수행하십시오.
이제 원하는 형식으로 필요한 정확한 데이터를 얻도록 수정하십시오.