Vâng, đó là, sử dụng API Trello và một vài công cụ khác.
Câu trả lời này dựa trên HTTPie và jq , hai công cụ có sẵn miễn phí có thể được cài đặt qua pip và Homebrew nếu bạn đang sử dụng máy Mac:
$ pip install httpie
$ brew install jq
Sử dụng HTTPie
chúng ta có thể truy vấn API Trello để lấy nguồn cấp dữ liệu hành động thô cho một bảng, sau đó chúng ta có thể sử dụng jq
để biến dữ liệu đó thành thứ gì đó hữu ích.
Hãy bắt đầu với một cái gì đó "đơn giản." Lệnh sau sẽ cung cấp cho chúng tôi tất cả các nhận xét được đưa ra trên Trello Dev Board vào tháng 4 năm 2013. Tôi sẽ giải thích điều này trong một giây:
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'
Nếu mọi thứ diễn ra theo đúng kế hoạch, chúng ta sẽ thấy một cái gì đó như thế này:
{
"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",
...
Mát mẻ. Đó là một đối tượng JSON hợp lý, duy nhất mà chúng ta có thể dễ dàng phân tích thành bất kỳ số lượng định dạng nào khác. Bây giờ chúng ta hãy thực hiện điều đó để chúng ta có thể hiểu nó đủ tốt để sửa đổi nó cho phù hợp với nhu cầu của chúng ta.
http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard"
Đây là phần duy nhất phụ thuộc vào Trello. Chúng tôi đưa ra yêu cầu đối với API công khai cho hội đồng quản trị với id 4d5ea62fd76aa1136000000c
- Tôi đã nhận được điều đó bằng cách truy cập https://trello.com/dev và xem id Trello gắn vào URL đầy đủ ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c
).
Các since
và before
các trường là tự giải thích. Tôi chỉ định một limit
số 1000
vì đó là phản ứng lớn nhất Trello sẽ cho phép. Nếu bảng của bạn có hơn một nghìn bình luận trong phạm vi ngày có liên quan, một giải pháp phân trang phức tạp hơn sẽ được yêu cầu ở đây. Tôi chỉ định một filter
số commentCard
vì tôi chỉ quan tâm đến những người vì mục đích câu trả lời này. Nếu bạn muốn có nhiều loại hành động hơn, hãy chỉ định một danh sách được phân tách bằng dấu phẩy như filter==commentCard,updateCard:idList,createCard
. Các loại hành động hợp lệ có thể được tìm thấy trong tài liệu tham khảo API Trello .
Nếu chúng ta tự chạy nó, chúng ta sẽ nhận được rất nhiều thông tin tương đối khó hiểu. Vì vậy, chúng tôi đưa nó vào jq
để xoa bóp nó vào một cái gì đó hữu ích hơn một chút.
jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'
Từng mảnh, jq
kịch bản của chúng tôi đang thực hiện các biến đổi sau, mỗi biến đổi kết quả của nó đến toán tử tiếp theo:
group_by(.data.card.id)
- Trello chỉ cho chúng ta một loạt các hành động. Chúng tôi biến nó thành một mảng các mảng, trong đó mỗi mảng phụ chỉ chứa các hành động cho một thẻ nhất định. Về cơ bản
[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
- Chúng tôi không muốn một mảng các mảng; chúng tôi chỉ muốn một đối tượng của hình thức
{ card1: [action1, action2, ...], card2: [action1, action2, ...], ...}
. Bằng cách biến mảng thành một mảng các cặp khóa-giá trị, chúng ta có thể sử dụng from_entries
để biến nó thành một đối tượng. Mát mẻ.
- Bây giờ hãy nhìn vào những gì tôi gọi
KEY_EXPRESSION
ở trên:(.[0].data.card | "\(.name) (\(.id))")
- Điều này khá đơn giản. Chúng tôi thực hiện mục nhập thẻ từ hành động đầu tiên (vì nó giống nhau cho tất cả các hành động, chúng tôi có thể đã chọn bất kỳ, nhưng lần đầu tiên có vẻ như là sự lựa chọn lành mạnh). Sau đó, chúng tôi sử dụng phép nội suy chuỗi (
\(...)
) để xây dựng một cái gì đó trông như thế nào "name (id)"
.
VALUE_EXPRESSION
Là map({date, member: .memberCreator.fullName, comment: .data.text})
- Chúng ta có thể chỉ sử dụng
.
để có được các mảng của tất cả các hành động không thay đổi. Nhưng vì các hành động hơi xấu, chúng tôi sẽ đưa chúng vào một cái gì đó hữu ích bằng cách map
ping qua mảng và áp dụng {date, member: .memberCreator.fullName, comment: .data.text}
cho từng đối tượng hành động riêng lẻ.
{date}
là giống như {date: date}
để jq
.
- Mọi thứ khác là khá tự giải thích. Bây giờ chúng tôi có ngày, thành viên (chỉ tên của họ, nhưng sẽ dễ dàng để có được nhiều hơn), và văn bản của bình luận.
Vì vậy, có bạn có nó. Er, hy vọng. Chúng tôi có thể thực hiện việc tạo khối dữ liệu này bằng bất kỳ ngôn ngữ kịch bản nào, nhưng đây chính xác là những gì jq
được xây dựng cho, vì vậy đó là một lý do tốt để tìm hiểu một công cụ mới tuyệt vời. Kiểm tra hướng dẫn jq để biết thêm.
Bây giờ, điều này hoạt động vì Trello Dev Board là công khai. Nhưng nếu chúng ta muốn dữ liệu riêng tư thì sao?
Cách đúng đắn để làm điều này là tạo mã thông báo API. Các Trello API Hướng dẫn Bắt đầu có một sự nhìn qua chi tiết về làm thế nào để làm điều này. Nhưng chúng ta đang vội, vì vậy chúng ta sẽ làm theo cách của kẻ lười biếng ...
Đăng nhập vào http://trello.com trong Chrome và mở bảng điều khiển (Xem> Nhà phát triển> Bảng điều khiển JavaScript). Gõ $.cookie('token')
vào cửa sổ. Điều này sẽ nhổ trở lại một cái gì đó như "uniquememberid/somegarbledstring"
. Sao chép phần giữa các trích dẫn và sửa đổi yêu cầu thành một cái gì đó như thế này:
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 ...
Điều duy nhất chúng tôi thay đổi là thêm "Cookie:token=uniquememberid/somegarbledstring"
tiêu đề. Điều này sẽ khiến Trello sử dụng mã thông báo. LƯU Ý rằng mã thông báo rất riêng tư ... nếu bạn đưa nó cho người khác, về cơ bản họ có thể đăng nhập như bạn cho đến khi bạn thu hồi nó tại Trang Tài khoản Trello . Vì vậy, bạn biết, hãy cẩn thận. Hoặc đi qua bước tạo khóa / mã thông báo API.
Bây giờ sửa đổi để có được dữ liệu chính xác mà bạn cần theo định dạng bạn muốn.