Чи можливо перерахувати всю активність для заданого діапазону дат у Trello?


11

Я використовую Trello протягом декількох місяців і регулярно публікую активність на картках, коли я працюю над ними, а потім переміщую їх ліворуч праворуч до списку "Завершити". Я не використовую терміни. Чи існує механізм перерахування тексту активності на всіх картках для заданого діапазону. Я намагаюся витягнути кілька необроблених даних, щоб подати звіт про стан за певний період.

Приклад: Якщо теперішній день - 15 травня 2013 р., Я хочу скласти список усіх текстів діяльності на кожній картці, де було записано «активність» за період 29 квітня - 3 травня.


Це можна зробити, але лише за допомогою API Trello. Вам зручно робити легке програмування, щоб отримати потрібні дані?
Ян Генрі

@IanHenry Так, мені комфортно.
Брайан

Відповіді:


14

Так, це за допомогою API Trello та кількох інших інструментів.

Ця відповідь покладається на HTTPie та jq , два вільно доступні інструменти, які можна встановити через pip та Homebrew, якщо ви використовуєте Mac:

$ pip install httpie
$ brew install jq

Використовуючи HTTPieми можемо запитувати API Trello, щоб отримати необроблений канал дій для дошки, тоді ми можемо використати, jqщоб перетворити ці дані в щось корисне.

Почнемо з чогось "простого". Наступна команда дасть нам усі зауваження, зроблені на борту Dev Dev в квітні місяця 2013 року. Я поясню це за секунду:

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'

Якщо все пішло за планом, ми повинні побачити щось подібне:

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

Класно. Це єдиний розумний об'єкт JSON, який ми можемо легко проаналізувати в будь-якій кількості інших форматів. Тепер давайте перейдемо до цього, щоб ми могли зрозуміти це досить добре, щоб змінити його відповідно до наших потреб.

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. Ми робимо запит проти загальнодоступного API для дошки з id 4d5ea62fd76aa1136000000c- я це зрозумів, перейшовши на https://trello.com/dev і подивившись на ідентифікатор, який Trello додає до повної URL-адреси ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c).

sinceІ beforeполя самоочевидні. Я вказати limitз , 1000тому що це найбільший відгук Trello дозволить. Якщо у вашій раді є більше тисячі коментарів у відповідному діапазоні дат, тут знадобиться складніше рішення підкачки. Я вказати filterз , commentCardтому що я зацікавлений тільки в тих , для цілей цієї відповіді. Якщо ви хочете більше типів дій, вкажіть список, розділений комами, як filter==commentCard,updateCard:idList,createCard. Дійсні типи дій можна знайти в довідці API Trello .

Якщо ми запустимо це самостійно, ми отримаємо багато інформації, яку порівняно важко зрозуміти. Тож ми мандруємо цим способом, jqщоб масажувати його в щось трохи корисніше.

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

Поступово наш jqсценарій здійснює такі перетворення, кожне з яких передає свій результат наступному оператору:

  • group_by(.data.card.id)
    • Trello просто надає нам ряд дій. Ми перетворимо це на масив масивів, де кожен підмасив містить лише дії для даної карти. В основному[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
  • map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
    • Ми не хочемо масиву масивів; ми просто хочемо об’єкт форми { card1: [action1, action2, ...], card2: [action1, action2, ...], ...}. Перетворивши масив у масив пар ключових значень, ми можемо використовувати його from_entriesдля перетворення на об’єкт. Класно.
  • Тепер давайте розглянемо те, що я зателефонував KEY_EXPRESSIONвище:(.[0].data.card | "\(.name) (\(.id))")
    • Це досить просто. Ми беремо запис картки з першої дії (оскільки вона повинна бути однаковою для всіх дій, ми могли вибрати будь-яку, але перша здається розумним вибором). Тоді ми використовуємо рядкову інтерполяцію ( \(...)), щоб побудувати щось схоже "name (id)".
  • VALUE_EXPRESSION є map({date, member: .memberCreator.fullName, comment: .data.text})
    • Ми могли би просто використати, .щоб масив усіх дій був незмінним. Але оскільки дії начебто некрасиві, ми масуємо їх у щось корисне, mapнатискаючи на масив та застосовуючи {date, member: .memberCreator.fullName, comment: .data.text}до кожного окремого об’єкта дії.
      • {date}те саме, що і {date: date}до jq.
      • Все інше досить зрозуміле. Зараз у нас є дата, член (лише їх ім’я, але їх було б легко отримати більше) та текст коментаря.

Так ось у вас це є. Ер, сподіваємось. Ми могли б зробити це масажуванням даних будь-якою мовою сценаріїв, але саме для цього jqбуло розроблено, тому це хороший привід вивчити новий класний інструмент. Перегляньте посібник з jq для отримання додаткової інформації.

Зараз це працює, оскільки правління Dev Trevlo є загальнодоступним. Але що робити, якщо ми хочемо приватні дані?

Право спосіб зробити це , щоб генерувати маркер API. Trello API Керівництво по початку роботи має докладний runthrough про те , як це зробити. Але ми поспішаємо, тож ми зробимо це ледачим способом ...

Увійдіть до http://trello.com у Chrome та відкрийте консоль (Перегляд> Розробник> Консоль JavaScript). Введіть $.cookie('token')у вікно. Це виплюне щось подібне "uniquememberid/somegarbledstring". Скопіюйте частину між цитатами та змініть запит таким чином:

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

Єдине, що ми змінимо - додавання "Cookie:token=uniquememberid/somegarbledstring"заголовка. Це змусить Трелло використовувати маркер. Зверніть увагу, що цей маркер є дуже приватним ... якщо ви надаєте його комусь іншому, він може входити в систему як ви, доки не відкликаєте його на сторінці облікового запису Trello . Тож, знаєте, будьте обережні. Або перейдіть через крок створення ключа / маркер API.

Тепер модифікуйте подалі, щоб отримати точні дані, які вам потрібні у потрібному форматі.


3

Я створив інструмент під назвою reportfortrello.com, який покаже вам, як довго карта знаходилась у списку протягом певного періоду часу.

Це безкоштовно і дозволяє оглянути 1000 дій назад на дошці. Він також може відстежувати членство на картці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.