Apakah mungkin untuk membuat daftar semua aktivitas untuk rentang tanggal tertentu di Trello?

11

Saya telah menggunakan Trello selama beberapa bulan dan saya secara rutin memposting aktivitas pada kartu ketika saya mengerjakannya dan kemudian memindahkannya dari kiri ke kanan ke daftar 'Lengkap'. Saya tidak memanfaatkan tanggal jatuh tempo. Apakah ada mekanisme untuk membuat daftar teks aktivitas pada semua kartu untuk rentang tertentu. Saya mencoba menarik beberapa data mentah untuk memberi makan laporan status untuk periode tertentu.

Contoh: Jika hari ini adalah 15 Mei 2013. Saya ingin membuat daftar semua teks aktivitas pada setiap kartu yang memiliki entri 'aktivitas' untuk periode 29 April - 3 Mei.

Brian
sumber
Ini bisa dilakukan, tetapi hanya dengan menggunakan Trello API. Apakah Anda merasa nyaman melakukan pemrograman ringan untuk mendapatkan data yang Anda inginkan?
Ian Henry
@IanHenry Ya saya nyaman.
Brian

Jawaban:

14

Ya, itu, menggunakan Trello API dan beberapa alat lainnya.

Jawaban ini bergantung pada HTTPie dan jq , dua alat yang tersedia secara bebas yang dapat diinstal melalui pip dan Homebrew jika Anda menggunakan Mac:

$ pip install httpie
$ brew install jq

Dengan menggunakan HTTPiekita dapat meminta API Trello untuk mendapatkan umpan tindakan mentah untuk sebuah papan, lalu kita dapat menggunakan jquntuk mengubah data itu menjadi sesuatu yang bermanfaat.

Mari kita mulai dengan sesuatu yang "sederhana." Perintah berikut akan memberi kami semua komentar yang dibuat di Trello Dev Board di bulan April 2013. Saya akan menjelaskan ini sebentar lagi:

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'

Jika semuanya berjalan sesuai rencana, kita akan melihat sesuatu seperti ini:

{
  "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",
      ...

Keren. Itu adalah objek JSON tunggal yang masuk akal yang dapat dengan mudah kita uraikan ke dalam sejumlah format lain. Sekarang mari kita melangkah melalui itu sehingga kita dapat memahaminya dengan cukup baik untuk memodifikasinya sesuai dengan kebutuhan kita.

http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard"

Ini adalah satu-satunya bagian yang bergantung pada Trello. Kami membuat permintaan terhadap API publik untuk papan dengan id 4d5ea62fd76aa1136000000c- Saya mendapatkannya dengan membuka https://trello.com/dev dan melihat id Trello ditambahkan ke URL lengkap ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c).

The sincedan beforebidang yang jelas. Aku menentukan limitdari 1000karena itulah respon terbesar Trello akan memungkinkan. Jika papan Anda memiliki lebih dari seribu komentar dalam rentang tanggal yang relevan, solusi paging yang lebih rumit akan diperlukan di sini. Aku menentukan filterdari commentCardkarena aku hanya tertarik pada mereka untuk tujuan jawaban ini. Jika Anda ingin lebih banyak jenis tindakan, tentukan daftar seperti dipisahkan koma filter==commentCard,updateCard:idList,createCard. Jenis tindakan yang valid dapat ditemukan di referensi Trello API .

Jika kita menjalankannya sendiri, kita akan mendapatkan banyak info yang relatif sulit untuk dipahami. Jadi kami menyalurkannya jquntuk memijatnya menjadi sesuatu yang sedikit lebih berguna.

jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'

Sepotong demi sepotong, jqskrip kami sedang melakukan transformasi berikut, masing-masing mengirimkan hasilnya ke operator berikutnya:

  • group_by(.data.card.id)
    • Trello hanya memberi kita serangkaian tindakan. Kami mengubahnya menjadi array array, di mana setiap sub array hanya berisi tindakan untuk kartu yang diberikan. Pada dasarnya[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
  • map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
    • Kami tidak ingin array array; kami hanya ingin objek dari formulir { card1: [action1, action2, ...], card2: [action1, action2, ...], ...}. Dengan mengubah array menjadi array pasangan nilai kunci, kita bisa menggunakannya from_entriesuntuk mengubahnya menjadi objek. Keren.
  • Sekarang mari kita lihat apa yang saya sebut di KEY_EXPRESSIONatas:(.[0].data.card | "\(.name) (\(.id))")
    • Ini cukup sederhana. Kami mengambil entri kartu dari tindakan pertama (karena harus sama untuk semua tindakan, kami bisa memilih salah satunya, tetapi yang pertama sepertinya pilihan yang waras). Kemudian kita menggunakan interpolasi string ( \(...)) untuk membangun sesuatu yang terlihat seperti "name (id)".
  • VALUE_EXPRESSION adalah map({date, member: .memberCreator.fullName, comment: .data.text})
    • Kita bisa saja menggunakan .agar semua tindakan tidak berubah. Tetapi karena tindakan agak jelek, kami memijatnya menjadi sesuatu yang berguna dengan melakukan mapping ke array dan menerapkan {date, member: .memberCreator.fullName, comment: .data.text}ke setiap objek aksi individu.
      • {date}sama {date: date}dengan jq.
      • Segala sesuatu yang lain cukup jelas. Kami sekarang memiliki tanggal, anggota (hanya nama mereka, tetapi akan lebih mudah untuk mendapatkan lebih banyak), dan teks komentar.

Jadi begitulah. Er, semoga. Kami dapat melakukan pemijatan data ini dalam bahasa skrip apa pun, tetapi inilah yang jqdibangun untuk itu, jadi itu alasan yang bagus untuk mempelajari alat baru yang keren. Check out panduan JQ untuk lebih.

Sekarang, ini berhasil karena Trello Dev Board bersifat publik. Tetapi bagaimana jika kita menginginkan data pribadi?

Cara yang tepat untuk melakukan ini adalah dengan menghasilkan token API. The Trello API Panduan Persiapan memiliki runthrough rinci tentang bagaimana untuk melakukan hal ini. Tapi kita sedang terburu-buru, jadi kita akan melakukannya dengan cara pria malas ...

Masuk ke http://trello.com di Chrome dan buka konsol (Lihat> Pengembang> Konsol JavaScript). Ketik $.cookie('token')ke dalam jendela. Ini akan meludahi sesuatu seperti "uniquememberid/somegarbledstring". Salin bagian di antara tanda kutip, dan ubah permintaan menjadi seperti ini:

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 ...

Satu-satunya hal yang kami ubah adalah menambahkan "Cookie:token=uniquememberid/somegarbledstring"header. Ini akan membuat Trello menggunakan token. CATATAN bahwa token itu sangat pribadi ... jika Anda memberikannya kepada orang lain, mereka pada dasarnya dapat masuk saat Anda sampai Anda mencabutnya di Halaman Akun Trello . Jadi, berhati-hatilah. Atau ikuti langkah pembuatan kunci / token API.

Sekarang modifikasi untuk mendapatkan data yang tepat yang Anda butuhkan dalam format yang Anda inginkan.

Ian Henry
sumber
3

Saya membuat alat yang disebut reportsfortrello.com yang akan menunjukkan kepada Anda berapa lama kartu berada dalam daftar selama rentang waktu.

Ini gratis dan memungkinkan Anda melihat 1000 tindakan kembali per papan. Itu juga dapat melacak keanggotaan kartu.

Brendan
sumber