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 HTTPie
kita dapat meminta API Trello untuk mendapatkan umpan tindakan mentah untuk sebuah papan, lalu kita dapat menggunakan jq
untuk 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 since
dan before
bidang yang jelas. Aku menentukan limit
dari 1000
karena 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 filter
dari commentCard
karena 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 jq
untuk 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, jq
skrip 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_entries
untuk mengubahnya menjadi objek. Keren.
- Sekarang mari kita lihat apa yang saya sebut di
KEY_EXPRESSION
atas:(.[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 map
ping 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 jq
dibangun 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.