[python]Chatworkへ自動的にタスク追加 | 独学プログラマーHiroのパーツボックスblog

[python自動化]特定フォルダにファイルが追加されたらChatworkにタスクを追加する方法

フォルダにファイルが入るとチャットワークに自動的にタスクが登録される方法 python
スポンサーリンク

特定のフォルダにファイルが入ると、定期実行しているpythonプログラムがChatworkにファイル名のタスクを追加して、処理待ちフォルダにファイルを移動する仕組みを説明します。

次の記事では、特定のフォルダにファイルを入れると定期実行しているpythonプログラムがタスクを完了する仕組みを説明しています。

組み合わせて使うと、タスクの見える化や処理の自動化ができます。

チームでの協同作業に最適です。

今回も無料で構築していきましょう。

処理フロー

次の記事を含めた全体のフローイメージです。

今回は左側のnewフォルダにファイルが入ったらchatworkにタスク登録した後、readyフォルダにファイルを移動するpythonプログラムを説明します。

chatwork-auto-tasksのフロー全体図

用意するもの

  • Chatwork API トークン
  • Chatwork ルームID
  • Chatwork アカウントID(toするとき等のユーザー識別ID)
  • python実行&開発環境(今回はすでに環境が用意されていることを前提で説明します)

Chatwork ID類

Chatwork API トークン

デスクトップアプリでは右上のユーザー名をクリックメニュー内の「サービス連携」をクリックします。

Chatworkのサービス連携メニュー画像

WEBブラウザが開きますので、APIトークンを選択して表示させます。

トークンをコピーしてメモ帳などで保存しておきます。

chatwork APIトークンの表示画面

タスクを追加するルームID

ルームIDを調べる方法は2つあります。

1つ目は、WEBブラウザでChatworkにログインして、チャットルームを選択した状態でURLにあるridの文字列の後の数字がルームIDです。

2つ目は、デスクトップアプリでチャットルームを選択した状態で右上のチャットワークのマークを左クリックするとリンクが表示されます。そちらもridの後の数字がルームIDです。

Chatwork ルームID表示画像

Chatwork アカウントID(toするとき等のユーザー識別ID)

アカウントIDはデスクトップアプリのユーザー名をクリックして出てくるメニューの環境設定の中にあります。環境設定ウィンドウの「Chatworkについて」タブを押すと表示されます。

数字7文字(ユーザー数が増えると桁数が増える可能性があります)です。

メッセージを送るときにTOを選んだ時に表示されるIDです。タスクの担当者を割り付ける時に使用します。

Chatwork アカウントID確認用画像

処理するフォルダを用意

今回は便宜上C:\Chatwork-auto-tasksの中に「new」「ready」「done」という3つのフォルダを用意しました。

他の人からの依頼がある場合には、共有フォルダやNAS上のフォルダを用意してください。

テスト実行時に動作確認できるようにnewフォルダに適当なファイルを保存しておいてください。

pythonコード

下記コードをコピーしてpythonファイル(.pyの拡張子)で保存して下さい。

import glob
from operator import truediv
import os
import requests
import datetime
import time
import shutil

#各種パラメータを設定
api_token='xxxxxxxxxxxxx' #ここにAPIトークンを入力してください
room_id='xxxxxxxxx' #ここにルームIDを入れてください
to_ids='xxxxxxx' #ここにタスクを割り付ける人のアカウントIDをいれてください
task_limit_type='time'
allresult=""

def send_chatwork_msg(msg_body): #chatworkにメッセージを送信する関数
    post_message_url = 'https://api.chatwork.com/v2/rooms/'+ room_id +'/messages'
    headers = {'X-ChatWorkToken': api_token ,'Content-Type': 'application/x-www-form-urlencoded'}
    params = { 'body': msg_body }
    # ポストリクエストを実行
    r = requests.post(post_message_url,
                        headers=headers,
                        params=params)
    return r

def add_tasks(task_body,task_limit): #chatworkにタスクを作成する関数
    post_message_url = 'https://api.chatwork.com/v2/rooms/'+ room_id +'/tasks'
    headers = {'X-ChatWorkToken': api_token ,'Content-Type': 'application/x-www-form-urlencoded'}
    params = { 'body': task_body,'limit':task_limit,'limit_type':task_limit_type ,'to_ids':to_ids }
    # ポストリクエストを実行
    r = requests.post(post_message_url,
                        headers=headers,
                        params=params)
    return r

if __name__ == "__main__":
    newfolder='C:/chatwork-auto-tasks/new' #ここにnewフォルダのパスをいれてください
    readyfolder='C:/chatwork-auto-tasks/ready' #ここにreadyフォルダのパスを入れてください
    if os.path.exists(readyfolder)==True and os.path.exists(readyfolder)==True: #newとreadyのフォルダ有無を確認
        new_file_list=glob.glob(newfolder+'/*.*') #newフォルダのファイルを取得
        if len(new_file_list)>0:
            for new_file_path in new_file_list:
                newfilename=os.path.basename(new_file_path)
                task_body=newfilename.split('.',1)[0] #拡張子を除いたファイル名をタスク名として設定
                dt_today=datetime.datetime.today()
                dt_limit=dt_today.replace(hour=17,minute=0,second=0,microsecond=0)+datetime.timedelta(days=7) #タスクの期限を7日後の17:00に設定
                task_limit=int(time.mktime(dt_limit.timetuple())) #unixtime
                r=add_tasks(task_body,task_limit)
                if r.status_code == 200:
                    shutil.move(new_file_path, readyfolder+'/'+newfilename)
                    if allresult == "":
                        allresult= "登録成功:" + task_body
                    else:
                        allresult=allresult+"\n登録成功:" + task_body
                else:
                    r = send_chatwork_msg('chatwork_add_tasks:登録失敗 code='+r.status_code) #タスク登録失敗をメッセージ送信
            r=send_chatwork_msg(allresult) #全部のタスク登録結果をメッセージで送信
    else:
        r = send_chatwork_msg('chatwork_add_tasks:フォルダ有無エラー') #new&readyフォルダ有無エラーをメッセージ送信

python実行(Chatwork-add-tasks.py)

pythonがインストールされていること前提で説明します。

Visual Studio Code上でデバッグ実行するとエラーが発生した場合に原因追求しやすいですが今回はコマンドプロンプト上での実行方法を説明します。

コマンドプロンプトの起動はWindowsタスクバーにある検索窓にcmdと入力すると候補として表示されますので「開く」を選択してコマンドプロンプトを起動してください。

c:\>コマンドを入力するところにカーソルを移動してコピーして作ったpythonファイルを実行してください。(赤ラインマークしているフォルダはあなたが用意したフォルダパスを入力ください)

python.exe C:\Chatwork-autot-tasks\Catwork-add-tasks.py

ライブラリのインポートエラーが発生した場合には、ライブラリのpip installをお願いします。

実行が完了したらnewフォルダに入れていたファイルがredyフォルダに移動します。

コマンドプロンプト実行前後の結果画像

chatwowkに移動すると指定したルームにタスクが追加されています。

Chatworkに自動的にタスク追加された結果画像

タスク期限を7日後の17:00に設定するようにプログラムされていますが、変更したい場合にはコードを改修してください。

自動的に定期実行できるようにする

実行するためのBATファイルをpytonファイルと同じフォルダ内に作成します。

BATファイルには次の記事で紹介する自動的にタスクを完了するプログラムも組み込む予定ですので、ファイル名を「Chatwork-auto-tasks.bat」とします。

batファイルの内容は2行なので、下記画像を参考にpythonファイルを実行する内容を記述してください。

chatwork-auto-tasksの起動batファイル作成画面

Windowsのタスクスケジューラーに定期実行するスケジュールを登録します。

常にプログラムを実行したい場合には稼働時間の長いサーバーなどに組み込んでください。その時に注が必要なのは、そのサーバーでpythonが動作するように環境構築が必要ということです。

今回はwindows11のPCで起動後に5分毎に実行する設定で登録します。

Windowsツールの中のタスクスケジューラーを起動します。

タスクスケジューラー起動画面

ウィンドウの右側の「タスクの作成」を選択してタスクの登録画面を表示します。

タスクの作成画面

「トリガー」は起動するタイミングと間隔などを設定します。自分の運用に合わせて変更ください。

タスクのトリガー設定画面

「操作」はプログラムの実行ファイルを指定します。

タスクの操作設定画面

すべての項目を自分の運用に適した値に設定出来たら登録するためにOKボタンを押します。

タスクを登録するためにユーザー名とパスワードを入力する必要があります。

うまく登録ができたらタスクスケジューラーライブラリに表示されます。

タスク登録とライブラリ表示画面

次回タスクスケジューラーの条件を満たしたタイミングで実行されます。

動作していることを確認できれば自動的にタスクを追加するフローの完成です。

チャットワークに自動的にタスクが追加された結果画面

次の記事では

次の記事ではreadyフォルダにあるファイルをdoneフォルダに手動で移動すると、自動的にChatworkのタスクが完了になる仕組みを構築する方法を説明します。

この記事がよかったら共有をお願いします。

ほかのカテゴリーの記事もご確認くださいね。

コメント

タイトルとURLをコピーしました