ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

スケジュール管理秘書さんのタスク管理【python + Line Messaging API】

今回はこんな声に対応するガジェットです。
「忘れっぽい性格なので毎朝、今後のスケジュールが把握できると嬉しい。憧れは秘書さんが、『社長、今後のスケジュールはこうなってます』という感じで教えてくれることだなあ」

f:id:kslabo51:20220227122257j:plain

毎朝秘書さんが今後のスケジュールを教えてくれます

忘れやすい今後のスケジュールを毎朝、秘書さんがラインで教えてくれるガジェットです。予定はスプレッドシート に殴り書きでOK。ラインで連絡くれるのは未完了の物だけになります。

f:id:kslabo51:20220227122420p:plain

このガジェットでできることはこちら

  • カレンダーではなくスプレッドシートに記入した予定を未完了のもののみ毎朝ラインで教えてくれます。
  • 今日だけではなく、予定が入っているもの全てお知らせします。
  • 教えてくれるのは綺麗な秘書さんなのでやる気マックスです。
  • 完了したものはスプレッドシート 上で完了とするだけで通知しなくなります。

注意点はこちら

  • スプレッドシートで「未」のフラグだけ通知しますので、完了したものはスプレッドシート 上で「完」のフラグにしないといけません。
  • 今回は一方行のラインチャットなので、返信やフラグの変更はできません。

評価(自己)

役立ち度   ★★★★(良し)
効率化    ★★(悪い)
ミス防止   ★★★★(良し)
楽しさ    ★★★★★(最高)
操作性    ★★★(平均)

実行環境

使用環境    github Actions、line messaging api
使用言語     python, yaml
使用ライブラリ  json、linebot 、datetime、spread、oauth2client、
         json、pandas

 

今回のコード

# app.py


import json
from linebot import LineBotApi
from linebot.models import TextSendMessage
import datetime as dt
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import json
import pandas as pd

# スプレッドシートにあるスケジュールからデータにアクセスする設定
# 今回はパスはjsonファイルで管理します。

SP_CREDENTIAL_FILE = 'secret.json'
SP_SCOPE = [
    'https://spreadsheets.google.com/feeds',
    'https://www.googleapis.com/auth/drive'
]

SP_SHEET_KEY = '予定表が入っているスプレッドシートのキー'
SP_SHEET1 = 'スプレッドシート のシート名'

credentials = ServiceAccountCredentials.from_json_keyfile_name(SP_CREDENTIAL_FILE, SP_SCOPE)
gc = gspread.authorize(credentials)

# スプレッドシート の読み込み
sh = gc.open_by_key(SP_SHEET_KEY)
worksheet = sh.worksheet(SP_SHEET1)
data = worksheet.get_all_values()

# スプレッドシート の整形
df = pd.DataFrame(data[1:]).iloc[:, :4]
df.columns = ['日付', '曜日', '予定', '完了']

df = df[df['完了']=='未']
df = df.reset_index(drop=True)

# 今回はLine Messaging APIのIDとキーもjsonファイルで管理します。
# Line Messaging APIの設定
file = open('info.json', 'r')
info = json.load(file)

CHANNEL_ACCESS_TOKEN = info['CANNEL_ACCESS_TOKEN']
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
today = dt.date.today()
day = today.strftime('%Y/%m/%d')

# 実行ファイル
def main():
    USER_ID = info['USER_ID']
    messages1 = TextSendMessage(text=f'{day}の予定です。')
    line_bot_api.push_message(USER_ID, messages1)
    for i in range(df.shape[0]):
        _df = df.iloc[i]
        date = _df['日付']
        sche = _df['予定'].replace('/', '、')
        # print(f'{date}に、{sche} の予定があります')

        messages2 = TextSendMessage(text=f'{date}に、{sche} の予定があります')
        line_bot_api.push_message(USER_ID, messages2)

    
if __name__ == '__main__':
    main()

 

github Actionsの設定

# main.yml

# ワークフロー名
name: chatbot

# 朝8時に発火
on:
#   push:
  schedule:
    - cron: '0 23 * * *'

jobs:
  build:
    runs-on: ubuntu-latest

    # 実行する処理&コマンド指定
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.8
        uses: actions/setup-python@v1
        with:
          python-version: 3.8
      - name: Install dependencies
        run: |
          # pip更新
          python -m pip install --upgrade pip
          # パッケージインストール
          pip install line-bot-sdk
          pip install gspread
          pip install oauth2client
          pip install pandas
      - name: Run script
#         env:
#           CHANNEL_ACCESS_TOKEN: "YOUR_CHANNEL_ACCESS_TOKEN"
#           USER_ID: "YOUR_USER_ID"
        run: |
          #実行
          python app.py

 

参考

いまにゅさんの動画がすごくわかりやすいです!

【LINEチャットボット作成】毎朝美女からメッセージが届く方法をわかりやすく解説!Python×Messaging API×GitHub Actions - YouTube