Czy w Trello można wyświetlić listę wszystkich działań dla danego zakresu dat?

11

Używam Trello od kilku miesięcy i rutynowo umieszczam aktywność na kartach, gdy nad nimi pracuję, a następnie przesuwam je od lewej do prawej na liście „Pełna”. Nie wykorzystuję terminów. Czy istnieje mechanizm wyświetlania tekstu aktywności na wszystkich kartach dla danego zakresu. Próbuję pobrać surowe dane, aby wygenerować raport o stanie za dany okres.

Przykład: jeśli dniem dzisiejszym jest 15 maja 2013 r. Chcę utworzyć listę wszystkich tekstów czynności na każdej karcie, która zawierała wpisy „aktywność” w okresie od 29 kwietnia do 3 maja.

Brian
źródło
Można to zrobić, ale tylko przy użyciu interfejsu API Trello. Czy czujesz się komfortowo, wykonując lekkie programowanie, aby uzyskać potrzebne dane?
Ian Henry
@IanHenry Tak, czuję się swobodnie.
Brian

Odpowiedzi:

14

Tak, przy użyciu interfejsu API Trello i kilku innych narzędzi.

Ta odpowiedź opiera się na HTTPie i jq , dwóch swobodnie dostępnych narzędziach, które można zainstalować za pomocą pip i Homebrew, jeśli używasz komputera Mac:

$ pip install httpie
$ brew install jq

Za pomocą HTTPiemożemy wysłać zapytanie do interfejsu API Trello w celu uzyskania surowego kanału akcji dla tablicy, a następnie możemy użyć jqdo przekształcenia tych danych w coś użytecznego.

Zacznijmy od czegoś „prostego”. Poniższe polecenie da nam wszystkie komentarze na forum deweloperów Trello w kwietniu 2013 roku. Wyjaśnię to za chwilę:

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'

Jeśli wszystko poszło zgodnie z planem, powinniśmy zobaczyć coś takiego:

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

Chłodny. Jest to jeden rozsądny obiekt JSON, który możemy łatwo przeanalizować w dowolnej liczbie innych formatów. Teraz przejdźmy przez to, abyśmy mogli zrozumieć go wystarczająco dobrze, aby zmodyfikować go do naszych potrzeb.

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

To jedyna część, która zależy od Trello. Zgłaszamy żądanie dotyczące publicznego interfejsu API dla płyty o identyfikatorze 4d5ea62fd76aa1136000000c- dostałem to, wchodząc na https://trello.com/dev i patrząc na identyfikator Trello dołącza do pełnego adresu URL ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c).

sinceI beforepola są oczywiste. I Podaj limitod 1000bo to największa odpowiedź Trello pozwoli. Jeśli Twoja tablica ma więcej niż tysiąc komentarzy w odpowiednim zakresie dat, wymagane byłoby tutaj bardziej skomplikowane rozwiązanie stronicowania. I Podaj filterof commentCardbo jestem zainteresowany tylko te, dla celów niniejszej odpowiedzi. Jeśli chcesz uzyskać więcej typów akcji, podaj listę rozdzielaną przecinkami, np filter==commentCard,updateCard:idList,createCard. Prawidłowe typy akcji można znaleźć w dokumentacji interfejsu API Trello .

Jeśli uruchomimy to samo, otrzymamy wiele informacji, których stosunkowo trudno zrozumieć. Więc wpuszczamy go, jqaby wmasować w coś nieco bardziej użytecznego.

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

Kawałek po kawałku, nasz jqskrypt dokonuje następujących transformacji, z których każda przekazuje swój wynik do następnego operatora:

  • group_by(.data.card.id)
    • Trello po prostu daje nam szereg działań. Przekształcamy to w tablicę tablic, w której każda podgrupa zawiera tylko akcje dla danej karty. Gruntownie[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
  • map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
    • Nie chcemy tablicy tablic; chcemy tylko obiektu formy { card1: [action1, action2, ...], card2: [action1, action2, ...], ...}. Przekształcając tablicę w tablicę par klucz-wartość, możemy użyć, from_entriesaby przekształcić ją w obiekt. Chłodny.
  • Teraz spójrzmy na to, co nazwałem KEY_EXPRESSIONpowyżej:(.[0].data.card | "\(.name) (\(.id))")
    • To jest dość proste. Pobieramy kartę z pierwszej akcji (ponieważ powinna być taka sama dla wszystkich akcji, mogliśmy wybrać dowolną, ale pierwsza wydaje się rozsądnym wyborem). Następnie używamy interpolacji łańcuchowej ( \(...)) do skonstruowania czegoś, co wygląda "name (id)".
  • VALUE_EXPRESSION jest map({date, member: .memberCreator.fullName, comment: .data.text})
    • Mogliśmy po prostu .uzyskać niezmienioną tablicę wszystkich działań. Ale ponieważ akcje są trochę brzydkie, masujemy je w coś użytecznego, mappingując tablicę i stosując się {date, member: .memberCreator.fullName, comment: .data.text}do każdego pojedynczego obiektu akcji.
      • {date}jest taka sama jak {date: date}do jq.
      • Wszystko inne jest dość oczywiste. Mamy teraz datę, członka (tylko ich nazwisko, ale łatwiej byłoby uzyskać więcej) i tekst komentarza.

Więc masz to. Mam nadzieję, że tak. Moglibyśmy wykonać takie masowanie danych w dowolnym języku skryptowym, ale właśnie po to jqzostało stworzone, więc jest to dobra wymówka, aby nauczyć się nowego, fajnego narzędzia. Więcej informacji znajdziesz w instrukcji jq .

To działa, ponieważ Zarząd Trello Dev jest publiczny. Ale co jeśli chcemy prywatnych danych?

Prawo sposób to zrobić, aby wygenerować token API. Przewodnik po interfejsie API Trello zawiera szczegółowe omówienie tego, jak to zrobić. Ale spieszymy się, więc zrobimy to tak, jak leniwy człowiek ...

Zaloguj się do http://trello.com w Chrome i otwórz konsolę (Widok> Deweloper> Konsola JavaScript). Wpisz $.cookie('token')w oknie. To wypluje coś takiego "uniquememberid/somegarbledstring". Skopiuj część między cytatami i zmodyfikuj żądanie, aby wyglądało mniej więcej tak:

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

Jedyne, co zmieniliśmy, to dodanie "Cookie:token=uniquememberid/somegarbledstring"nagłówka. Spowoduje to, że Trello użyje tokena. UWAGA: ten token jest bardzo prywatny ... jeśli podasz go komuś innemu, może on zasadniczo zalogować się jako ty, dopóki go nie odwołasz na stronie konta Trello . Więc bądź ostrożny. Lub przejdź przez etap generowania klucza / tokenu API.

Teraz zmodyfikuj, aby uzyskać potrzebne dane w żądanym formacie.

Ian Henry
źródło
3

Stworzyłem narzędzie o nazwie reportfortrello.com, które pokaże ci, jak długo karta znajdowała się na liście w określonym przedziale czasu.

Jest bezpłatny i pozwala spojrzeć 1000 akcji na planszę. Może także śledzić członkostwo kart.

Brendan
źródło