NOT

clickupのAPIを使って、タスクの取得や更新をしてみる。

ClickUpのAPIをPythonで使ってみます。ベータ版ですが、ClickUp APIは2.0。Pythonは3.7を使います。
APIのドキュメントは、ClickUp™ | API Docsにあります。

準備と知識

必要なTokenの取得と、ClickUpの階層についてです。

API Tokenを取得。

clickupのtokenの取得画面

Tokenは、「Apps」のページから取得します。各種設定画面の左サイドバーの下のほうに「Apps」ページへのリンクがあります。
自分のタスクを扱うだけなら、Tokenの下にあるアプリを作成する必要はありません。

階層

clickupのtokenの取得画面

タスクを取得する時に、チーム・スペース・プロジェクト・リストなどのIDが必要になってきます。
それぞれの階層については、ClickUp におけるユーザー/チーム/ワークスペース等とタスクの関係 (類似製品との比較含む) - Qiitaを読んでもらうのがわかりやすいと思います。
ここでは、IDの取得方法だけを紹介します。

https://app.clickup.com/{チームID}/v/l/[数字]-{プロジェクトID}-1?pr={ワークスペースID}

プロジェクトのタスク一覧を開いてURLを確認してください。View(リストとかカンバンとか)を複数作っている場合は、一番左側のデフォルトのところを指定してください。URL構造は上記のようになっています。

https://app.clickup.com/{チームID}/v/l/[数字]-{リストID}-1?pr={ワークスペースID}

今度はリストのタスク一覧を開いてみてください。プロジェクトと同様にViewはデフォルトのところを指定してください。

これでタスクをどの範囲まで取得するのに必要な各種IDと、全体のチームIDの取得が出来たかと思います。

必要なモジュールをインストール

sudo pip3 install requests

requestsを使うので、入っていない人はインストールしてください。環境によって、インストール方法は異なります。

タスクの取得

まずはタスクの取得からです。

チームタスクの取得

import json
import datetime
import requests
  
TOKEN = '{APITOKEN}'
TEAMID = "{TEAMID}"
headers = {
  'Authorization': TOKEN,
  'Content-Type': 'application/json'
}
  
# オプション
params = {}
  
r = requests.get(url="https://api.clickup.com/api/v2/team/"+TEAMID+"/task",params=params,headers=headers)
if r.status_code == 200:
  tasks = r.json()
  for task in tasks["tasks"]:
    print(task["name"])
else:
  print("エラ-です")

「Tasks/Get Filtered Team Tasks」を利用して、チームのタスクを取得します。
上のプログラムだと、オプションパラメーターを指定していないので、チーム内のタスクが全て取得されます。相当数になると思います。

各種オプション

デフォルトでは、subtaskはFlaseになっていて取得されません。サブタスクも取得する場合は、Trueにします。

params = {"subtasks":True}

特定のスペースのみ取得する場合は、スペースIDを配列で指定します。プロジェクトやリストも同様です。

params = {"space_ids[]":["0000","00001"]}
params = {"project_ids[]":["0000","00001"]}
params = {"list_ids[]":["0000","00001"]}

特定のStatusのみを取得する場合は、Statusを配列で指定します。

params = {"statuses[]":["in progress","review"]}

特定のタグが指定されているタスクを取得する場合は、タグ名を配列で指定します。

params = {"tags[]":["sprint"]}

締切日でタグを摘出する場合は、due_date_gt(より後)とdue_date_lt(より前)を指定します。指定方法は、UNIXタイム(13桁)です。

params = {"due_date_gt":1581174000000}

例えば、今日より前の締切日(期日超え)のタスクを取得する場合は、下記のようになります。

today = datetime.date.today()
today = datetime.datetime.combine(today,datetime.time())
today = int(today.strftime('%s'))*1000
params = {"due_date_lt":today}

タスクの更新

import requests
  
  TOKEN = '{APITOKEN}'
  headers = {
    'Authorization': TOKEN,
    'Content-Type': 'application/json'
  }
  
TASKID = '{TASKIDを指定}'
values = '{"priority": 1}'
r = requests.put(url="https://api.clickup.com/api/v2/task/"+TASKID,data=values,headers=headers)
if r.status_code == 200:
  print("成功です")
else:
  print("エラ-です",r.status_code)

「Tasks/Update Task」を使います。

TASKのIDは、個別タスクを表示してurlの/t/より後ろの英数字になります。上のコードでは、プライオリティを1(urgent)にしています。
注意するのは、更新するパラメータを指定するvaluesは、dict(辞書)ではなくて文字列です。シングルコンマで囲ってください。

タスクの登録

import requests

TOKEN = '{APITOKEN}'
headers = {
  'Authorization': TOKEN,
  'Content-Type': 'application/json'
}

LISTID = '{登録するリストのID}'
values = '{"name":"新規タスク","status":"Open","priority":4}'
r = requests.post(url='https://api.clickup.com/api/v2/list/'+LISTID+'/task',data=values.encode("utf-8"),headers=headers)

if r.status_code == 200:
  print("成功です")
else:
  print("エラ-です",r.status_code)

「Tasks/Create Task」を使います。登録するリストIDを指定して、登録するタスク名や詳細などをvaluesに入れてpostします。更新と同様にパラメーターのvaluesはdict(辞書)ではなくて文字列です