※この投稿は、
初学者のオタクが、推しの出演情報を管理するLINEbotを作ってみた。【Python+LINEMessagingAPI+スプレッドシート】
のその1です。
やったこと
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
【講座内のサンプルコード】↓
# 出勤
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('勤怠(出勤)登録完了しました')
【私が書き直したコード】↓
# 出勤
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 //日本時間に変更されている
~ $