最近、健康と体力維持のために寝る前に家トレをやってるんですが、
習慣化されるまでってどうしても忘れてしまったり、モチベーションが続かなかったりするんですよね。
そこでLINE Notifyを使ってリマインド的に「筋トレやろう!」っていうメッセージを送ればいいんじゃないかと。
ただ、単にメッセージだけだと結局無視をしてしまったりで、あんまり効果がなさそうだなぁと思ったので、
視覚的に脳に訴える筋肉モリモリマッチョマンの画像を送れば少しはヤル気が出るんじゃないか?
ということで、決まった時間にマッチョの画像を送り付けるLINEbotを作ります。
構成イメージ
開発環境
- MacOS High Sierra
- Python3.6
- AWS Lambda
- LINE Notify API
- Google Custom Search API
必要な情報
イメージした構成に必要な情報を取得しておきます。
- LINE Notify アクセストークン
- Google API key
- Google カスタム検索 検索エンジンID
以下の記事を参考にしました。
ソースコード
- LINE Notifyが使いやすそうなので、Lambda(python)から何か通知させてみる
- Google Custom Search APIを使って画像収集
- LINE Notify API ドキュメント
こちらを参考にLambdaに実装していきます。
lambda_function.py
# -*- coding:utf-8 -*-
import os
import urllib.parse
import urllib.request
import json
import random
def get_word():
word_list = ['筋トレ','マッチョ','細マッチョ','肉体美']
num = random.randrange(len(word_list))
return word_list[num]
def get_image(word):
img = []
query_img = "https://www.googleapis.com/customsearch/v1?key=" + os.environ['GOOGLE_API_KEY'] + "&cx=" + os.environ['CUSTOM_SEARCH_ENGINE'] + "&q=" + urllib.parse.quote(word) + "&searchType=image"
res = urllib.request.urlopen(query_img)
data = json.loads(res.read().decode('utf-8'))
num = random.randrange(len(data["items"]))
img.append(data["items"][num]["image"]["thumbnailLink"])
img.append(data["items"][num]["link"])
return img
def send_line(message,image):
LINE_NOTIFY_URL = 'https://notify-api.line.me/api/notify'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer ' + os.environ['LINE_NOTIFY_TOKEN']
}
body = {
'message': message,
'imageThumbnail':image[0],
'imageFullsize':image[1],
}
data = urllib.parse.urlencode(body)
req = urllib.request.Request(LINE_NOTIFY_URL, data=data.encode('utf-8'), method='POST', headers=headers)
with urllib.request.urlopen(req) as res:
response_body = res.read().decode("utf-8")
def lambda_handler(request, context):
word = get_word()
image = get_image(word)
message = '筋トレしませんか?'
send_line(message,image)
テスト動作
Googleカスタム検索結果をランダムで送っているので、
たまにマッチョ以外の画像も送られてきますが、想定通りに動いています。
決まった時間に通知が来るようにする
あとはcron機能を使って定時で動かすだけ。
CloudWatch Eventで決まった時間に関数を実行することができるようなので、
これを使って決まった時間にマッチョ画像を送り付けることができます。
使ってみた感想
- 特に筋トレのモチベーションは上がらなかった