clickupのAPIを使って、タスクの取得や更新をしてみる。
ClickUpのAPIをPythonで使ってみます。ベータ版ですが、ClickUp APIは2.0。Pythonは3.7を使います。
APIのドキュメントは、ClickUp™ | API Docsにあります。
準備と知識
必要なTokenの取得と、ClickUpの階層についてです。
API Tokenを取得。
Tokenは、「Apps」のページから取得します。各種設定画面の左サイドバーの下のほうに「Apps」ページへのリンクがあります。
自分のタスクを扱うだけなら、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(辞書)ではなくて文字列です