1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

勤怠管理botを作る[Python+スプシでLINEbot作成その①]

Last updated at Posted at 2023-07-25

※この投稿は、
初学者のオタクが、推しの出演情報を管理するLINEbotを作ってみた。【Python+LINEMessagingAPI+スプレッドシート】
のその1です。

その2はこちら
その3はこちら

やったこと

Youtubeに投稿されている講座を見て、勤怠管理botの実装をしました。

使用教材

いまにゅのプログラミング塾

開発環境

Windows 11 Home

使用技術

・Python3.11.4
・LINE Messaging API
・Google Cloud Platform(Google Drive API, Google Sheets APIを使用)

・Flask

・Heroku
・Git

講座の通りいかなかったところ・調べたところ

基本的には講座の通りに行えば想定通り動きました!
PythonとGit以外は初めて触りましたが、実装し終わる頃には各技術の基礎は理解できたので、初学者の方にめちゃくちゃおすすめしたい!
今から2年前の動画なので若干状況が変わっていたことや私の環境の問題等から、自分で調べて解決した箇所を備忘録としてまとめます。(参考にしたサイトのリンクも貼りました。)

・PandasのDataFrameの関数、df.append()が削除された。(2022年4月)
代わりにpd.concat()を使用する。dfを2つ以上用意して結合する。
https://bering.hatenadiary.com/entry/2023/05/15/064223
【講座内のサンプルコード】↓

app.py
# 出勤
def punch_in():
    worksheet = auth()
    df = pd.DataFrame(worksheet.get_all_records())

    timestamp = datetime.now()
    date = timestamp.strftime('%Y/%m/%d')
    punch_in = timestamp.strftime('%H:%M')

    df = df.append({'日付': date, '出勤時間': punch_in, '退勤時間': '00:00'}, ignore_index=True)
    worksheet.update([df.columns.values.tolist()] + df.values.tolist())
    print('勤怠(出勤)登録完了しました')

【私が書き直したコード】↓

app.py
# 出勤
def punch_in():
    worksheet = auth()
    #スプレッドシートから全データを取得
    df1 = pd.DataFrame(worksheet.get_all_records())
    #現在の日付、時刻をString型に変換
    timestamp = datetime.now()
    date = timestamp.strftime('%Y/%m/%d')
    punch_in = timestamp.strftime('%H:%M')
    #打刻時間のレコードをDataFrameとして作成
    df2 = pd.DataFrame(data=[{'日付': date, '出勤時間': punch_in, '退勤時間': '00:00'}])
    #元データと新しいデータの結合(pd.concat()関数)
    df = pd.concat([df1, df2], ignore_index=True)
    
    worksheet.update([df.columns.values.tolist()] + df.values.tolist())
    print('勤怠(出勤)登録完了しました')

・update関数はdf→リスト型に変更する必要あり。

・HerokuCLIのコマンドについて
git push heroku master→git push heroku mainという言い方になった。

・ローカルで動かす際、secret.jsonはフルパスで書かないと認識されなかった。
ただしデプロイ前に相対パスに戻すのを忘れずに。

・管理者以外でHerokuをダウンロードした際は、そのままコマンドを打ってもパスが通らない。
コマンドプロンプトを管理者で実行もしくは、標準ユーザとして環境関数を変更する。
https://engineeringpython.com/%E3%80%90heroku-cli%E3%80%91%E7%AE%A1%E7%90%86%E8%80%85%E4%BB%A5%E5%A4%96%E3%81%AE%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AE%E5%A4%89%E6%9B%B4%E6%96%B9%E6%B3%95%EF%BC%88path%E3%81%AE%E8%A8%AD/

・herokuのタイムスタンプを日本時間に直す必要あり。(デフォルトはアメリカ時間)
https://qiita.com/hanayama3/items/e7c48913a5e989d7f06d

C:\Users\[ユーザ名]\[フォルダ名]>heroku run bash
Running bash on[Herokuのアプリケーション名]... up, run.1431 (Basic)
~ $ date
Mon Jul 24 02:53:14 PM UTC 2023   //アメリカ時間
~ $ exit
exit

C:\Users\[ユーザ名]\[フォルダ名]>heroku config:add TZ=Asia/Tokyo
Setting TZ and restarting[Herokuのアプリケーション名]... done, v9
TZ: Asia/Tokyo

C:\Users\[ユーザ名]\[フォルダ名]>heroku run bash
Running bash on[Herokuのアプリケーション名]... up, run.2682 (Basic)
~ $ date
Mon Jul 24 11:57:17 PM JST 2023   //日本時間に変更されている
~ $

得られたこと

PandasでDataFrameを扱ういいおさらいになった。

LINEbotが動く仕組みを知れた。

デプロイのイメージが湧いた。

Gitの基本コマンドの復習になった。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?