徒然日記

徒然なるままに書いていきます 固めのものからゆるい日常まで書きたいものを

研究室の入退記録を自動ツイートできるようにしてしまった話

タイトルの通りです。
ログオン・ログオフ時に自動的にツイートして入退記録が出来るようにしてしまいました。
ちなみにWindowsです。

全体の大まかな流れは

のお手軽3ステップです。

2.コード書き書き

実際に書いたコードはこちら!

import tweepy
import datetime

#ステップ1で取得したAPIKeyを以下に入力
CK = 'XXXXX' #CK=consumer_key
CS = 'XXXXX' #CS=consumer_secret
AT = 'XXXXX' #AT=access_token
AS = 'XXXXX' #AS=access_secret

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)

#ツイート
d = datetime.datetime.today()
api.update_status('%s年%s月%s日' % (d.year, d.month, d.day)
+ '%s時%s分%s秒' % (d.hour, d.minute, d.second)
+ 'にラボin!\n 今日も一日頑張るぞい')

時間の部分は以下の記事を参考にしました。
Python: 現在の日付・時刻の取得と出力 - datetimeクラスの属性、today()、strftime()メソッド | Yukun's Blog

ラボoutの方も適当に文言を変えるだけです。
実行結果はこんな感じです。

なかなか健康的なラボライフでございます。


3.ログオン・ログオフ時に発動するように設定

細かいステップを説明すると
3.1 laboin.pyを発動するようなbatファイルの作成
3.2 laboin.batをグループポリシーでログオンスクリプトとして登録
3.3 laboin.pyをログオンディレクトリに置いてくる
になります。


3.1 laboin.pyを発動するようなbatファイルの作成
これの3番目の方法を参考にbatファイルを作成します。
WindowsでPythonの実行する4つの方法 - ちょっと便利なてっちーノート


3.2 laboin.batをグループポリシーでログオンスクリプトとして登録
これが一番わかりやすいと思います。
グループ・ポリシーを使って、コンピュータの終了時にコマンドを実行する:Tech TIPS - @IT

自分はシャットダウン時ではなくてログオフ時にしたかったので実際の登録場所は以下の記事を参考にしました。
Windows 2012 でログオン・ログオフ時間をイベントへ記録する。


そしてこれらの記事を参考にログオンスクリプト・ログオフスクリプトとして登録します。

…それだけのはずなのに何度やってもうまく発動しないので、


3.3 laboin.pyをログオンディレクトリに置いてくる
のステップをやります。

以下の図はログオンスクリプトにlaboin.batを登録しているだけの状態です。
f:id:cobaltic:20190628204850p:plain

他の設定を少しいじって(後述)実行すると以下のようなメッセージが吐かれます。

f:id:cobaltic:20190628204913p:plain

多分
①ログオンスクリプトのbatファイルが開く
②batファイルの処理としてpyファイルを開こうとするがないので開けない

というような流れなので参照ボタンを押して出てくる場所に以下のように実行されるべきpyファイルを置いてきたところ
f:id:cobaltic:20190628204932p:plain
上手くいくようになりました。

ちなみにログオンスクリプトに登録して、仮に失敗したとしても親切にエラーを吐いてくれません。
[GP]「実行中のレガシ ログオン スクリプトを表示しない」で利用されているレジストリ | Windowsレジストリ置き場
を参考にしてログオンスクリプトの実行を表示する に設定することで原因が明らかになりました。

この記事を書く上では以下の記事にお世話になりました。
はてなブログにソースコードを色付けして貼り付ける方法 - sonickun.log


更なる改良点としては滞在時間算出したり、Excelに書き込むようにしてみたりとかで管理とか色々発展できそうですね。
けど今回はここまでで勘弁してください。なんでこんなものを作ってしまったのか、自分も今後も使い続けるかは謎です。

追記:
なんかシャットダウンがすごい遅くなってたのですが、laboaout.batファイルのpauseを消したところ解決しました。