(更新日:2022/01/27)
誕生日にLINEグループに、メッセージと画像を自動送信する仕組みです。もちろん、タイムリーに自分で送信できればいいですが、プライベートや仕事の都合で、AM0時ぴったりは難しい。というときに試していただきたい内容です。自動送信は、決められたタイミングで繰り返し同じ動作を設定できるので、「毎月このタイミングLINEしたい。」という場合にも有効です。また、自分に向けたリマインドに使うのもありと思います。今回はWindowsユーザー向けに記事を書いています。Windowsタスクスケジューラ-、Python、LINEを連携させ、お祝いメッセージを送ってみましょう!
想定読者
「誕生日AM0時ぴったりに、LINEでお祝いしたい!」という方。
「仲のいい友達をアッと言わせたい!」という方。
やり方
Pythonインストール
まず初めに、Pythonをまだインストールしていない方は、
こちらの記事(定時にOutlookメールを自動送信する方法)を参考にして、
Pythonをインストールしてください。
LINE APIの取得
LINE NotifyというLINE APIを使用します。
API(Application Programming Interface)の略です。
あるアプリが、別のアプリ(ソフトウェア)の機能を使いたい!となった際に、
連携を行うための窓口が、APIです。
今回は、LINEの機能をPythonと連携させたいので、LINEのAPIを使用する形です。
LINE Notify(LINE APIの一種)では、トークンと呼ばれる暗号キーを発行し、
そのトークンに紐づく相手に、メッセージや画像を送ったりすることができます。
まずは、LINE Notifyのアカウント作成を行ってください。
ページ右上の「ログイン」をクリックします。
ログイン後、プルダウンをクリックし、「マイページ」を選択します。
「アクセストークンを発行する」を選択してください。
LINEメッセージを投稿するのは、TO自分自身 or TOトークルーム限定みたいです。
とりあえずは、自分自身を対象にしておいて、プログラムのテストをしましょう。
(グループラインに、テスト用のメッセージを連発することになってしまうので)
トークンが発行されました。
忘れないようにメモしておいてください。
システム全体像
メール自動送信システムへの登場人物は、
Windowsタスクスケジューラ-、Python、LINEです。
全体フローは以下の通りです。
- Windowsタスクスケジューラ-で、Pythonファイル実行するタスクを作成
- Pythonファイル実行
- LINE Notifyと連携
- PC内の指定したフォルダから写真をランダムに1枚選択
- 写真タイトルとその画像をLINEで対象へ送信
あらかじめ、Pythonプログラムと同じフォルダに、
「images」というフォルダを作成し、
投稿したい画像を格納しておいてください。
このとき、画像のタイトルがメッセージとして、画像と一緒に投稿されるので、
画像タイトルに、「Happy Birthday!!」のようなメッセージを入れましょう。
Pythonプログラム
さっそく、Pythonコードの全体像です。
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 27 28 29 30 31 32 33 34 35 36 37 38 |
#!/usr/bin/env python # coding: utf-8 #必要なライブラリをインポート import requests import glob import os import time import sys import datetime import random #メッセージと写真を送付する関数を定義 def Line_Notify(message,image): access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXX' #取得したLineトークン url = "https://notify-api.line.me/api/notify" #LINE-APIのURL(エンドポイント) time = datetime.datetime.now() #現在時刻の取得 time = time.strftime('%Y年%m月%d日 %H:%M:%S') #見やすい形(〇〇年◯◯月〇〇日 00:00:00)に変換 send_contents = time #情報を辞書型に変更 send_dic = {'message':send_contents} headers = {'Authorization': 'Bearer ' + access_token} payload = {'message': message} files = {'imageFile': open(image, 'rb')} #binary dataで読み込む #LINEへの投稿を実行 requests.post(url, headers=headers, data=send_dic,) requests.post(url, headers=headers, params=payload, files=files,) #LINEへの投稿を実行 files = glob.glob("images/*") #画像ファイルのパスを取得 file = random.choice(files) #取得したパスの中からランダムに1つを抽出 print(file) #抽出した1つのファイルパスを出力 Line_Notify(os.path.split(file),file) #画像のファイル名と画像自体を出力 |
タスクスケジューラ-の設定
あとはタスクスケジューラ-で、定時にこのPythonプログラムを実行する
タスクを作成していきます。
タスクスケジューラ-の使い方は、こちらの動画を参考にしました。
タスクスケジューラ-でのタスク設定は、
そんなに難しくないので、ここまでこれば自動化完成です!
まとめ
いかがでしたでしょうか?
いろいろと応用も聞きそうな仕組みなので、ぜひ自分なりにアレンジしてみてください。
また、こちらの記事も参考にしてみてください。
ではでは!