20
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[筋トレ] LINE Notifyからマッチョの画像が送られてくる

Last updated at Posted at 2018-09-14

最近、健康と体力維持のために寝る前に家トレをやってるんですが、
習慣化されるまでってどうしても忘れてしまったり、モチベーションが続かなかったりするんですよね。

そこでLINE Notifyを使ってリマインド的に「筋トレやろう!」っていうメッセージを送ればいいんじゃないかと。

ただ、単にメッセージだけだと結局無視をしてしまったりで、あんまり効果がなさそうだなぁと思ったので、
視覚的に脳に訴える筋肉モリモリマッチョマンの画像を送れば少しはヤル気が出るんじゃないか?
ということで、決まった時間にマッチョの画像を送り付けるLINEbotを作ります。

構成イメージ

TrainingDiagram.png

開発環境

必要な情報

イメージした構成に必要な情報を取得しておきます。

  • LINE Notify アクセストークン
  • Google API key
  • Google カスタム検索 検索エンジンID

以下の記事を参考にしました。

ソースコード

こちらを参考に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)

テスト動作

IMG_7781.jpg IMG_7782.jpg

Googleカスタム検索結果をランダムで送っているので、
たまにマッチョ以外の画像も送られてきますが、想定通りに動いています。

決まった時間に通知が来るようにする

あとはcron機能を使って定時で動かすだけ。

CloudWatch Eventで決まった時間に関数を実行することができるようなので、
これを使って決まった時間にマッチョ画像を送り付けることができます。

使ってみた感想

  • 特に筋トレのモチベーションは上がらなかった

おまけ

好きなキャラクターや推しのアイドルの目覚ましbotにも使えるかも?
IMG_7783.jpg

20
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?