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 und TemplateSendMessage und MessageAction hinzugefügt
)
app = Flask(__name__)
#Umgebungsvariablen abrufen
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!"
#Geben Sie eine URL für den Webhook von LINE Developers an, damit der Webhook ein Ereignis an die URL sendet
@app.route("/callback", methods=['POST'])
def callback():
#Rufen Sie den Wert für die Signaturüberprüfung aus dem Anforderungsheader ab
signature = request.headers['X-Line-Signature']
#Anfragetext abrufen
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
#Überprüfen Sie die Signatur und rufen Sie die im Handle definierte Funktion auf, wenn kein Problem vorliegt
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
#Im Falle von Text geben Sie den Papagei zurück
# @handler.add(MessageEvent, message=TextMessage)
# def handle_message(event):
# line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
#Muster zum Abrufen des Profils und Anzeigen in Rich 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":
#Status in LINE registriert_Wenn die Nachricht leer ist"Keiner"Verwenden Sie die Zeichenfolge als alternativen Wert
status_msg = "Keiner"
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="Erfolg", text="Was sollen wir als nächstes implementieren?")]))
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 #Holen Sie sich die gepostete Bild-ID
message_content = line_bot_api.get_message_content(push_img_id) #Holen Sie sich Bilder automatisch auf dem LINE-Server gespeichert
push_img = b""
for chunk in message_content.iter_content():
push_img += chunk #Bilditer_mit Inhalt pushen_Img nacheinander ersetzen
push_img = base64.b64encode(push_img).decode("utf-8") #Base64 für die Übergabe der API codiert
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)
Recommended Posts