Hands-on
準備⚓︎
LINEグループ準備⚓︎
今回の仕組みから自動投稿させるグループを決める。新しく作ってもよい。既存のものでもよい。
LINE Notifyのアクセストークン取得⚓︎
ネットで検索すれば、アクセストークンの取得方法はたくさん出てくる。例えば、本ページ最下部の参考サイトなど。
- LINE Notifyのアクセストークンは1度しか表示されないのできちんとコピペしておくこと1
- 【Generate token】を実施する際には、使いたいグループ(上述で設定したもの)を指定して発行すること
- アクセストークン発行時、グループを指定する画面の上側に入力するテキストボックスは、メッセージ投稿が起きるたびにメッセージ冒頭に投稿される。あまり長くない文字列がよさそう。
動作確認⚓︎
スクリプトを定期実行しようとしているCentOS上で以下のコマンドを実行する。
curl -X POST -H "Authorization: Bearer <TOKEN>" -F "message=<TEXT>" https://notify-api.line.me/api/notify
<TOKEN>
はLINEで発行したアクセストークン、 <TEXT>
はLINEに送りたいメッセージとなる。
メールボックス準備⚓︎
「とりまとめメールボックス」を作成する。私が利用している さくらのレンタルーサーバ
であれば、ちょっと設定するだけ。
アーカイブ用メールフォルダ作成⚓︎
作成したメールボックス内にアーカイブ用のメールフォルダを作成する。今回は「done」という名前のフォルダにした。LINEへの通知処理が終わったメールはこちらに移動させる。
メールフォルダ名の確認⚓︎
通常使っている範囲では、「メールをフォルダ移動させる」とは「マウスでドラッグ&ドロップ」するだけだが、Pythonで処理するには「メールコピー&オリジナル削除」という手順を踏む必要がある模様。
コピーするにしても移動するにしても、移動先のメールフォルダ名を正しく把握しなければならない。調べる。Pythonで以下を実行。
メールボックス名称を調べる | |
---|---|
1 2 3 4 5 6 7 |
|
SERVER_ADDRESS
, IMAP_PORT
, MAIL_ADDRESS
, MAIL_PASSWORD
はそれぞれの環境でサーバに接続するために設定する。例えばさくらのレンタルサーバなら、このページに情報がある。
結果が長くてわかりにくいが、上記の結果(ハイライト行)から、移動させたいメールフォルダの正式名称が "INBOX.done"
であることがわかった。
作成⚓︎
GitHubにあげた2。以降、行数は今時点の数字なので、今後ソースファイルを修正する際にずれる可能性がある。参考程度。
ほぼ main.py
だけのスクリプト。
logging.config読み取り⚓︎
Windowsで開発し、Linuxで実行している。デフォルトエンコーディングはそれぞれcp932とutf-8。Python3.10ぐらいからは logging.config.fileConfig
で encoding
オプションが使えるようになっているので、utf-8で作ったファイルを、utf-8で指定して読み込めば両方で問題ない。今回、Linuxの環境はPython3.6.8なので、このオプションが使えずそのままだとエラーになる。
OSによって読み込みオプションを変える(対処療法) | |
---|---|
25 26 27 28 |
|
Pythonが新しいWindows側では、オプション指定できるのでそれを使い、Linux側では指定しなくてもutf-8なのでそのまま読み込むようにした。
本来は実行環境を整えることが正しいと思ってはいる。
msgの処置関数⚓︎
関数いただきました | |
---|---|
79 80 81 82 83 84 85 86 87 88 89 90 |
|
この部分のmsg処理関数は、参考サイト(2番目)からコピペさせてもらった。
メールのデコード(手抜き)⚓︎
デコード処理の手抜き | |
---|---|
148 149 150 151 152 |
|
メールによって、エンコード方式が違っていたので、2つで試せば何とかなるだろう、という安易な理由で処理を入れた。
メールボックス内フォルダ移動⚓︎
処置したメールのフォルダ移動 | |
---|---|
183 184 185 186 187 188 189 190 191 192 193 |
|
メールをフォルダに移動するには、コピーして削除、の処理を行う必要がある。上記のうち、 "INBOX.done"
が環境ごとに異なるであろう設定となる。
実装⚓︎
CentOSで継続動作させる。
適切なディレクトリに移動し、ソースを何らかの手段で配置するところは省略。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
テスト実行⚓︎
cronで実行するにあたり、マニュアルで実行する。事前、もしくは動作中の任意のタイミングで、とりまとめメールボックスにメールを投げておく。
1 2 3 4 5 6 |
|
実行結果は log/LINE_Notify.log
に保存される。必要に応じて、 logrotate
でlog世代管理しておく。
cron設定⚓︎
以下を設定して、継続動作させる。
1 2 3 4 5 6 7 8 9 |
|
参考サイト⚓︎
- 【line notify】pythonでlineへ通知してみよう!
LINE Notifyのアクセストークン取得など。画像があってわかりやすい。 - Python3でメールを受信してLINEグループへ通知
特にメールmsg部分の処置関数を流用させていただいた。 - IMAP Pythonでメール受信を行う方法 email imaplib
シンプルにまとまっているので全般的に参考にさせていただいた。