Evet, Trello API'sini ve diğer birkaç aracı kullanıyor.
Bu cevap dayanır HTTPie ve JQ yoluyla kurulabilir iki serbestçe kullanılabilir araçlar pip ve Homebrew Eğer bir Mac kullanıyorsanız:
$ pip install httpie
$ brew install jq
Kullanma HTTPie
o zaman kullanabilirsiniz, bir yönetim kurulu için çiğ aksiyon yem almak için Trello API sorgulayabilir jq
kullanışlı bir hale verileri açmak için.
"Basit" bir şeyle başlayalım. Aşağıdaki komut , Nisan 2013 ayında Trello Dev Board'da yapılan tüm yorumları bize verecek . Bunu bir saniye içinde açıklayacağım:
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'
Her şey plana göre giderse, böyle bir şey görmeliyiz:
{
"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",
...
Güzel. Bu, istediğiniz sayıda başka biçime kolayca ayrıştırabileceğimiz tek ve makul bir JSON nesnesidir. Şimdi bunun üzerinden geçelim, böylece ihtiyaçlarımıza uyacak şekilde değiştirmeyi yeterince anlayalım.
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'ya bağlı olan tek kısım bu. Biz kimliğine sahip genel API için talepte bulunuyoruz 4d5ea62fd76aa1136000000c
- bunu https://trello.com/dev adresine giderek ve Trello'nun tam URL'ye ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c
) eklediği kimliğe bakarak anladım .
since
Ve before
alanlar kendiliğinden gelir. Ben belirtmek limit
ait 1000
olduğunu Trello sağlayacak büyük tepki olduğu için. İlgili tarih aralığında kurulunuzda binden fazla yorum varsa, burada daha karmaşık bir sayfalama çözümü gerekir. Ben belirtmek filter
ait commentCard
sadece bu cevap amaçları için olanlar ilgilenen olmam. Daha fazla eylem türü istiyorsanız, gibi virgülle ayrılmış bir liste belirtin filter==commentCard,updateCard:idList,createCard
. Geçerli eylem türleri Trello API başvurusunda bulunabilir .
Eğer bunu kendi başımıza yürütürsek, anlaşılması oldukça zor birçok bilgi alırız. Bu yüzden onu jq
biraz daha kullanışlı bir şeye masaj yapmak için bağlarız.
jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'
Parça parça, jq
senaryomuz aşağıdaki dönüşümleri yapıyor, her biri sonucunu bir sonraki operatöre iletiyor:
group_by(.data.card.id)
- Trello bize sadece bir dizi eylem sunuyor. Bunu, her alt dizinin yalnızca belirli bir kart için eylemler içerdiği bir dizi dizisine dönüştürürüz. temel olarak
[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
- Bir dizi dizi istemiyoruz; sadece formun bir nesnesini istiyoruz
{ card1: [action1, action2, ...], card2: [action1, action2, ...], ...}
. Diziyi bir dizi anahtar / değer çifti haline getirerek, bunu from_entries
bir nesneye dönüştürmek için kullanabiliriz . Güzel.
- Şimdi
KEY_EXPRESSION
yukarıda ne dediğime bakalım :(.[0].data.card | "\(.name) (\(.id))")
- Bu oldukça basit. Kart girişini ilk eylemden alıyoruz (tüm eylemler için aynı olması gerektiğinden, herhangi birini seçebilirdik, ancak ilki aklı başında seçim gibi görünüyor). Sonra
\(...)
benzeyen bir şey oluşturmak için string interpolation ( ) kullanırız "name (id)"
.
VALUE_EXPRESSION
dır-dir map({date, member: .memberCreator.fullName, comment: .data.text})
- Biz sadece kullanılmış olabilir
.
değişmeden bütün eylemlerin dizisini alır. Ancak eylemler biraz çirkin olduğu için, map
diziye ping yaparak ve {date, member: .memberCreator.fullName, comment: .data.text}
her bir eylem nesnesine uygulayarak bunları faydalı bir şeye masaj yapıyoruz .
{date}
aynıdır {date: date}
için jq
.
- Geri kalan her şey oldukça açıklayıcı. Artık tarihe, üyeye (sadece isimleri, ancak daha fazlasını elde etmek kolay olurdu) ve yorum metnine sahibiz.
İşte burada. Umarım. Bu verilere herhangi bir komut dosyası dilinde masaj yapabilirdik, ama tam olarak jq
bunun için tasarlandı, bu yüzden havalı yeni bir araç öğrenmek için iyi bir bahane. Daha fazla bilgi için jq kılavuzuna bakın.
Şimdi bu işe yarıyor çünkü Trello Dev Kurulu halka açık. Peki ya özel veriler istiyorsak?
Bunu yapmanın doğru yolu bir API jetonu oluşturmaktır. Trello API Başlangıç Kılavuzu Bunun nasıl ayrıntılı bir akma vardır. Ama acelemiz var, bu yüzden tembel adamın yolunu yapacağız ...
Chrome'da http://trello.com adresine giriş yapın ve konsolu açın (Görünüm> Geliştirici> JavaScript Konsolu). Tip $.cookie('token')
penceresine. Bu gibi bir şey tükürecek "uniquememberid/somegarbledstring"
. Parçayı tırnak işaretleri arasında kopyalayın ve isteği şu şekilde değiştirin:
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 ...
Değiştirdiğimiz tek şey "Cookie:token=uniquememberid/somegarbledstring"
başlığı eklemektir . Bu, Trello'nun jetonu kullanmasını sağlayacaktır. Bu jetonun çok özel olduğunu unutmayın ... başka birine verirseniz, siz Trello Hesap Sayfasında iptal edene kadar temelde sizin gibi giriş yapabilirler . Yani, bilirsin, dikkatli ol. Veya API anahtarı / jeton oluşturma adımını izleyin.
Şimdi istediğiniz formatta ihtiyacınız olan kesin verileri elde etmek için değişiklik yapın.