Có thể liệt kê tất cả hoạt động cho một phạm vi ngày nhất định trong Trello không?


11

Tôi đã sử dụng Trello được vài tháng và tôi thường xuyên đăng hoạt động lên thẻ khi tôi làm việc với chúng và sau đó chuyển chúng sang trái sang danh sách 'Hoàn thành'. Tôi không tận dụng ngày đáo hạn. Có một cơ chế để liệt kê văn bản hoạt động trên tất cả các thẻ cho một phạm vi nhất định. Tôi đang cố gắng lấy một số dữ liệu thô để cung cấp báo cáo trạng thái trong một khoảng thời gian nhất định.

Ví dụ: Nếu ngày hôm nay là ngày 15 tháng 5 năm 2013. Tôi muốn tạo một danh sách tất cả văn bản hoạt động trên mỗi thẻ có mục 'hoạt động' cho giai đoạn 29 tháng 4 - 3 tháng 5.


Điều này có thể được thực hiện, nhưng chỉ bằng cách sử dụng API Trello. Bạn có thoải mái khi thực hiện một số chương trình nhẹ để có được dữ liệu bạn muốn không?
Ian Henry

@IanHenry Vâng, tôi cảm thấy thoải mái.
Brian

Câu trả lời:


14

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 HTTPiejq , hai công cụ có sẵn miễn phí có thể được cài đặt qua pipHomebrew nếu bạn đang sử dụng máy Mac:

$ pip install httpie
$ brew install jq

Sử dụng HTTPiechú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 sincebeforecác trường là tự giải thích. Tôi chỉ định một limitsố 1000vì đó 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 filtersố commentCardvì 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, jqkị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_EXPRESSIONmap({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 mapping 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.


3

Tôi đã tạo một công cụ có tên là báo cáofortrello.com sẽ cho bạn biết thời gian của một thẻ trong danh sách trong một khoảng thời gian.

Nó là miễn phí và cho phép bạn nhìn lại 1000 hành động trên mỗi bảng. Nó cũng có thể theo dõi thành viên thẻ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.