LoginSignup
0
0

More than 3 years have passed since last update.

LINE heroku python

Last updated at Posted at 2020-09-26

コード記録

from flask import Flask, request, abort
import os

import vision as v
import vision1 as v1
import base64

from linebot import (
   LineBotApi, WebhookHandler
)
from linebot.exceptions import (
   InvalidSignatureError
)
from linebot.models import (
   MessageEvent, TextMessage, TextSendMessage, ImageMessage,ButtonsTemplate,TemplateSendMessage,MessageAction #ImageMessage、ButtonsTemplateとTemplateSendMessageとMessageActionを追加
)

app = Flask(__name__)

# 環境変数取得
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)


@app.route("/")
def hello_world():
   return "hello world!"


#LINE DevelopersのWebhookにURLを指定してWebhookからURLにイベントが送られるようにする
@app.route("/callback", methods=['POST'])
def callback():
   # リクエストヘッダーから署名検証のための値を取得
   signature = request.headers['X-Line-Signature']

   # リクエストボディを取得
   body = request.get_data(as_text=True)
   app.logger.info("Request body: " + body)

   # 署名を検証し、問題なければhandleに定義されている関数を呼ぶ
   try:
       handler.handle(body, signature)
   except InvalidSignatureError:
       abort(400)
   return 'OK'

# テキストの場合はオウム返し
# @handler.add(MessageEvent, message=TextMessage)
# def handle_message(event):
#    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))


#プロフィールを取得してリッチテキストで表示するパターン
@handler.add(MessageEvent, message=TextMessage)
def response_message(event):
    profile = line_bot_api.get_profile(event.source.user_id)

    status_msg = profile.status_message
    if status_msg != "None":
        # LINEに登録されているstatus_messageが空の場合は、"なし"という文字列を代わりの値とする
        status_msg = "なし"

    messages = TemplateSendMessage(alt_text="Buttons template",
                                   template=ButtonsTemplate(
                                       thumbnail_image_url=profile.picture_url,
                                       title=profile.display_name,
                                       text=f"User Id: {profile.user_id[:5]}...\n"
                                            f"Status Message: {status_msg}",
                                       actions=[MessageAction(label="成功", text="次は何を実装しましょうか?")]))

    line_bot_api.reply_message(event.reply_token, messages=messages)



@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).decode("utf-8") # APIに通すためbase64エンコード
   msg = v1.recognize_image2(push_img)
   line_bot_api.reply_message(event.reply_token, TextSendMessage(text=msg))

if __name__ == "__main__":
   #    app.run()
   port = int(os.getenv("PORT"))
   app.run(host="0.0.0.0", port=port)

参考

LINE BOT(オウム返し)を作る

0
0
0

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
0
0