from flask import Flask, request, abort
import face_detect as f # face_detext.py
import base64
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, ImageMessage
)
import os
app = Flask(name)
# 環境変数取得
# LINE Developersで設定されているアクセストークンとChannel Secretを取得し設定します。
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
# webhookからのリクエストチェック
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
# ⇨リクエストヘッダーからの署名検証の為の値を取得。
signature = request.headers['X-Line-Signature']
# get request body as text
# ⇨リクエストボディの取得
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
# ⇨ 署名を検証後、問題なければhandleに定義されている関数を呼び出す
try:
handler.handle(body, signature)
# 署名検証で失敗した場合、例外を出す
except InvalidSignatureError:
abort(400) # handleの処理を終えればOK
return 'OK'
#LINEのメッセージの取得と返信内容の設定(オウム返し)
#LINEでMessageEvent(普通のメッセージを送信された場合)が起こった場合に、
def以下の関数を実行します。
#reply_messageの第一引数のevent.reply_tokenは、イベントの応答に用いるトークンです。
#第二引数には、linebot.modelsに定義されている返信用のTextSendMessageオブジェクトを渡しています。
@handler.add(MessageEvent, message=TextMessage)
テキストの場合はオウム返し:62行目
def handle_message(event):
# line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
line_bot_api.reply_message(event.reply_token, TextSendMessage(text="測定したい写真を送ってね!!"))
print(event.message.text)
# コンソール上に表示させる
# imgがPOSTされた時の応答
@handler.add(MessageEvent, message=ImageMessage)
def handle_image_message(event):
push_img_id = event.message.id # 投稿された画像IDを取得
message_content = line_bot_api.get_message_content(push_img_id)
# LINEサーバー上に自動保存された画像を取得
push_img = b""
for chunk in message_content.iter_content():
push_img += chunk #画像をiter_contentでpush_imgに順次代入
push_img = base64.b64encode(push_img) # APIに通すためbase64エンコード
msg = f.face_detect(push_img)
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=msg))
# ポート番号の設定
# おまじない
if <strong>name</strong> == "main":
# app.run()
port = int(os.getenv("PORT", 5000))
# Heroku console access
app.run(host="0.0.0.0", port=port)
コメントを残す