Можно ли перечислить все действия для данного диапазона дат в Trello?


11

Я использую Trello в течение нескольких месяцев и регулярно размещаю действия на карточках, работая над ними, а затем перемещаю их слева направо в список «Complete». Я не использую сроки оплаты. Есть ли механизм для перечисления текста активности на всех карточках для данного диапазона. Я пытаюсь получить некоторые необработанные данные для подачи отчета о состоянии за определенный период.

Пример. Если текущим днем ​​является 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для превращения этих данных во что-то полезное.

Давайте начнем с чего-то «простого». Следующая команда предоставит нам все комментарии, сделанные на форуме разработчиков Trello в апреле 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 для форума с идентификатором 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)
    • Трелло просто дает нам множество действий. Мы превращаем это в массив массивов, где каждый вложенный массив содержит только действия для данной карты. В принципе[[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))")
    • Это довольно просто. Мы берем запись карты с первого действия (поскольку она должна быть одинаковой для всех действий, мы могли бы выбрать любое, но первое кажется разумным выбором). Затем мы используем строку interpolation ( \(...)) для создания чего-то похожего "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 для получения дополнительной информации.

Теперь это работает, потому что Trello Dev Board является публичной. Но что, если нам нужны личные данные?

Право способ сделать это , чтобы генерировать маркер API. Руководство по началу работы с API Trello содержит подробное описание того, как это сделать. Но мы спешим, поэтому мы сделаем это как ленивец ...

Войдите на 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 использовать токен. ЗАМЕТЬТЕ, что этот токен является очень приватным ... если вы дадите его кому-то другому, они могут войти в систему как вы, пока вы не отзовете его на странице учетной записи Trello . Так что, знаете, будьте осторожны. Или пройдите этап генерации ключа / токена API.

Теперь измените, чтобы получить точные данные, которые вам нужны в нужном формате.


3

Я создал инструмент под названием reportsfortrello.com, который покажет вам, сколько времени карта была в списке за определенный период времени.

Это бесплатно и позволяет просматривать 1000 действий назад на доске. Это может также отследить членство карты.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.