chatworkの完了タスクの一覧を取得してCSVに書き出すpythonスクリプト(chatwork API利用)

chatworkの完了タスクの一覧を取得してCSVに書き出すpythonスクリプト(chatwork API利用)

cybozu liveの利用が来年で終了することも影響し、クライアントとのやりとりでchatworkを利用する場面が多くなりました。
chatwork上でタスクを管理し、chatwork上で完了報告をするのに加え、月毎に別途作業明細書をクライアントに毎月送付しているのですが、それをいちいちスプレッドシートやExcelで作成するのは非常に手間です。

そこで今回は、chatworkAPIを利用し、トークルーム毎に自分に課せられたタスクですでに完了しているものだけを抽出し、エクセルに書き込み、Gmail APIを用いてメールで自動送信するPythonスクリプトを作成し、毎月月末にスクリプトを実行するcronを設定するまでをやってみたいと思います。

と、思いましたが、まずはchartwork APIを利用し完了済みタスク一覧を取得しCSVに書き出すまでをやってみたいとおもいます。

スクリプト全文

いきなりですが、スクリプト全文です。

import requests
    import json
    import csv
    
    '''
    変数(取得したいルーム名などの変数をここで変更)
    '''
    API_TOKEN  = 'XXXXXXXXXXXXXXXXXXXXXXXXX' # APIトークンを入力する
    account_id = XXXXXXXX # 自分のアカウントIDを入力
    room_id    = XXXXXXXX # 取得したいルーム名を入力
    file_name  = 'test.csv' # タスクを入出力するファイル名を入力

    '''
    ここから下は特に変更しない。
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    '''

    '''
    定数(基本変更しない部分)
    '''
    HEADERS = {
        'X-ChatWorkToken': API_TOKEN
    }
    PARAMS = {
        'account_id': account_id,
        'status'    : 'done'
    }
    ENDPONT = 'https://api.chatwork.com/v2/'
    
    
    def get_tasklist_by(room_id):
        '''
        ルームIDからタスク一覧をリストで返す関数
        '''
        r = requests.get(ENDPONT + 'rooms/' + str(room_id) + '/tasks', headers=HEADERS, params=PARAMS)
        data = r.json()
        return data
    
    def get_donetasks_id(file_name):
        '''
        既存のcsvファイルから入力済みのタスクIDをリストで返す関数
        '''
        task_ids = []
        with open(file_name) as f:
            reader = csv.reader(f)
            for row in reader:
                task_ids.append(int(row[0]))
        # 入力済みのタスクIDリストを返す
        return task_ids
    
    
    def not_finished(task_id, task_ids):
        '''
        今回取得したタスクIDが、すでにcsvに記載されているものか判定
        pa
        '''
        if not int(task_id) in task_ids:
            return True
        else:
            return False
    
    if __name__ == '__main__':
    
        # ルームIDからタスク一覧を取得
        tasks = get_tasklist_by(room_id)
        # ファイル名から入力済みのタスク一覧を取得
        finished_task_ids = get_donetasks_id(file_name)
        for task in tasks:
            # もしタスクがすでにcsvに入力されていなければ
            if not_finished(task['task_id'], finished_task_ids):
                with open(file_name, 'a', encoding='UTF-8') as f:
                    writer = csv.writer(f)
                    writer.writerow([task['task_id'], task['body']])

変数を自分用に書き換える

'''
    変数(取得したいルーム名などの変数をここで変更)
    '''
    API_TOKEN  = 'XXXXXXXXXXXXXXXXXXXXXXXXX' # APIトークンを入力する
    account_id = XXXXXXXX # 自分のアカウントIDを入力
    room_id    = XXXXXXXX # 取得したいルーム名を入力
    file_name  = 'test.csv' # タスクを入出力するファイル名を入力

account_idのXXXXXXXXの部分を自分のアカウントIDに変更します。
また、room_idのXXXXXXXXの部分を自分のルームIDに変更します。

自分のaccount_idを調べる

自分のaccount_idを調べるには、
ターミナル上でcurlコマンドをサクッと実行をすると良いでしょう。

curl -X GET -H "X-ChatWorkToken: 自分のAPIトークン" "https://api.chatwork.com/v2/me"

自分のAPIトークンの部分は、チャットワークの管理画面の「API設定」のページから発行することが出来ますので、その値に書き換えてから上記を実行します。
すると、8桁の数字がレスポンスで返ってくるので、それを上記のaccount_idのXXXXXXXXの部分に書き換えます。

自分のroom_id一覧を調べる

curl -X GET -H "X-ChatWorkToken: 自分のAPIトークン" "https://api.chatwork.com/v2/rooms"

上記に続き、自分のAPIトークンの部分を書き換えてからcurlコマンドを実行します。

書き出すcsvは任意で決めてOK

クライアントのルーム毎に管理したいので、分かりやすいようにクライアント名にファイル名を変えておきます。

変数を書き換えた上記のスクリプトを実行する

適当なファイル名を付けて上記の変数を書き換えた実行用ファイルを保存し、ターミナルで実行します。

python main.py

すると、同階層に’test.csv'(任意のファイル名)が保存されます。
以上で、準備が整いましたので、次のパートでは、今回出力したCSVファイルを整形し、メールで送信するスクリプトまでを作りたいと思います。