WekanAPI와 jq를 사용하여 카드에서 작업 시간을 추출해 본 이야기

13905 단어 Wekanchocolateyjq

소개



칸반 방식 태스크 관리 툴 「Wekan」을 이용해 태스크 관리를 하고 있다.
다양한 API도 제공되고 있는 것 같기 때문에, 그들을 사용해 카드로부터 정보를 추출해 본다.


환경


  • 클라이언트 PC: Windows10 Pro
  • 명령: Git Bash

  • Wekan의 API 호출



    Wekan이 REST API을 제공하고 있기 때문에 그것을 사용합니다.



    할 수있는 일을 요약하면 다음과 같습니다.

     - 로그인 처리
     - 사용자 목록, 로그인된 사용자 목록
    - 사용자 등록, 활성화, 비활성화, 정보 획득
    - 카드 등록, 삭제, 갱신 등을 들 수 있다.

    공식적으로도 기재되어 있지만, 아직 미완성 상태인 것 같다.

    액세스 토큰 얻기



    로그인 상태가 아니면 카드를 볼 수 없기 때문에, 사전에 토큰을 발행한다.
    ${ServerName} , ${email} , ${password} 는 적절히 입력하는 것


    HTTP Method
    Url
    Short Description

    POST/users/login Authenticate with the REST API.

    $ curl http://${ServerName}/users/login \
      -d "email=${email}&password=${password}" -s
    {"id":"FtDartLCavnm2NbFC","token":"YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw","tokenExpires":"2019-03-17T01:28:38.347Z"}
    

    이후의 처리에서는 헤더에 토큰 정보를 설정하여 카드 정보를 취득한다.

    swinlaneid 얻기



    대상 수영 차선 목록을 가져옵니다. ※칸반의 각 행의 id에 해당하는 개소


    HTTP Method
    Url
    Short Description

    GET/api/boards/:boardId/swimlanes REST API Swimlanes

    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \ 
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes -s 
    [{"_id":"qHg6qGGShDPmgdrN4","title":"tasks"},{"_id":"sSjG6txBwCGcSviPW","title":"event"},{"_id":"AYcP8gYYDpK2niCxX","title":"backlog"},{"_id":"w53X5PSWDt28dzxxN","title":"sprint"}]
    

    카드 획득



    상기에서 취득한 수영 차선 내의 카드 일람을 취득한다. ※ 특정 행에 포함된 모든 카드


    HTTP Method
    Url
    Short Description

    GET/api/boards/:boardId/swimlanes/:swimlaneId/cards REST-API-Cards

    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards -s
    [{"_id":"FRDjZf9FQcZ4ayXip","title":"Java11検証:2h","description":"","listId":"uK7Thp97rGdtEXQvC"},{"_id":"EmXHtfv7d3y2FQkkM","title":"UnitTest:3h","description":"","listId":"uK7Thp97rGdtEXQvC"},]
    

    jq 도구 사용



    반환된 JSON 형식 데이터는 콘솔에 한 줄로 표시되므로 보기 힘들다.

    그 때문에, 문자열의 정형이나 데이터의 추출 기능을 가지는 툴 「jq 」를 사용한다.

    설치



    공식 다운로드에서 설치하려고했지만 exe를 실행할 수 없으므로 다른 방법으로 시도하십시오.

    아래의 사이트를 참고로, 다른 방법으로서 Windows의 패키지 매니저 Chocolatey로 넣는다.

    json을 쉽게 처리 할 수있는 jq 명령 도입 (Mac, Windows)

    확인 OK
    $ chocolatey list jq
    Chocolatey v0.10.11
    jq 1.5
    

    JSON을 성형하여 출력



    파이프로 jq .를 연결합니다.
    
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards -s | jq .
    [
      {
        "_id": "FRDjZf9FQcZ4ayXip",
        "title": "Java11検証:2h",
        "description": "",
        "listId": "uK7Thp97rGdtEXQvC"
      },
      {
        "_id": "n7dHW6KsDMGaRjkTA",
        "title": "UnitTest:3h",
        "description": "",
        "listId": "uK7Thp97rGdtEXQvC"
      }
    ]
    

    jq 도구 활용


    : 이후에 2h 와 같이 작업 시간을 기재하고 있으므로, 모든 카드의 합계치를 계산해 본다.

    목록의 카드로 필터링



    작업의 상태가 'TODO', 'DOING', 'DONE'으로 나뉘어 있기 때문에,
    select 함수를 사용하여 목록 ID로 "TODO"로 필터링합니다. ※칸반의 각 행의 id에 해당하는 개소
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards -s \
    | jq '.[] | select(.listId == "uK7Thp97rGdtEXQvC" or.listId == "JCsuKobA4wBL8jvmb")'
    {
      "_id": "FRDjZf9FQcZ4ayXip",
      "title": "Java11検証:2h",
      "description": "",
      "listId": "uK7Thp97rGdtEXQvC"
    }
    {
      "_id": "n7dHW6KsDMGaRjkTA",
      "title": "UnitTest:3h",
      "description": "",
      "listId": "uK7Thp97rGdtEXQvC"
    }
    
    

    카드 내용으로 필터링



    카드내의 타이틀만을 원하기 때문에 키(title)로 좁힌다.
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards | \
     jq '.[] | select(.listId == "uK7Thp97rGdtEXQvC" or.listId == "JCsuKobA4wBL8jvmb") | .title'
    "Java11検証:2h"
    "UnitTest:3h"
    

    불필요한 이중 인용구 삭제



    옵션 -r 를 부여한다.
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards -s | \
    jq '.[] | select(.listId == "uK7Thp97rGdtEXQvC" or.listId == "JCsuKobA4wBL8jvmb") | .title' -r
    Java11検証:2h
    UnitTest:3h
    

    작업 시간만 추출


    split 에서 : 뒤의 문자열을 가져오고 gsub 에서 h 를 삭제합니다.
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http:/${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards  -s | \
    jq -c '.[] | select(.listId == "uK7Thp97rGdtEXQvC" or.listId == "JCsuKobA4wBL8jvmb") | .title | split(":")[1] | gsub("h";"") | tonumber' -r
    2
    3
    

    작업 시간을 배열로 설정



    수치형식의 배열이 아니면 합계치를 산출할 수 없기 때문에, tonumber 로 수치 변환 또한 [] 로 둘러싼다.
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards  -s | \
    jq -c '[.[] | select(.listId == "uK7Thp97rGdtEXQvC" or.listId == "JCsuKobA4wBL8jvmb") | .title | split(":")[1] | gsub("h";"") | tonumber]' -r
    [2,3]
    

    합계 계산


    add 로 배열의 수치의 합계치를 구한다.
    $ curl -X GET -H "Authorization: Bearer YLerKsBaQMP3MwX7iLRioWKHXbewQ-e9jyPLcFbL1Nw" \
    http://${ServerName}/api/boards/pMBEMbm2KfrR2P73n/swimlanes/w53X5PSWDt28dzxxN/cards -s | \
    jq -c '[.[] | select(.listId == "uK7Thp97rGdtEXQvC" or.listId == "JCsuKobA4wBL8jvmb") | \
    .title | split(":")[1] | gsub("h";"") | tonumber] | add' -r
    5
    

    참고


  • jq를 활용하여 API 응답 등에서 원하는 정보만 추출
  • jq 명령을 사용하는 일상 소개
  • jq 명령으로 기억하고 싶은 사용법 17개
  • jq Manual
  • 좋은 웹페이지 즐겨찾기