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 #Ajout de ImageMessage, ButtonsTemplate et TemplateSendMessage et MessageAction
)
app = Flask(__name__)
#Obtenir des variables d'environnement
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!"
#Spécifiez une URL pour le webhook LINE Developers afin que le webhook envoie un événement à l'URL
@app.route("/callback", methods=['POST'])
def callback():
#Obtenez la valeur pour la vérification de la signature à partir de l'en-tête de la demande
signature = request.headers['X-Line-Signature']
#Obtenir le corps de la demande
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
#Validez la signature et appelez la fonction définie dans le handle s'il n'y a pas de problème
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
#Dans le cas du texte, retournez le perroquet
# @handler.add(MessageEvent, message=TextMessage)
# def handle_message(event):
# line_bot_api.reply_message(event.reply_token, TextSendMessage(text=event.message.text))
#Modèle pour obtenir le profil et l'afficher en texte enrichi
@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":
#Statut enregistré dans LINE_Si le message est vide"Aucun"Utilisez la chaîne de caractères comme valeur alternative
status_msg = "Aucun"
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="Succès", text="Que devrions-nous mettre en œuvre ensuite?")]))
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 #Obtenez l'ID d'image publiée
message_content = line_bot_api.get_message_content(push_img_id) #Obtenez des images automatiquement enregistrées sur le serveur LINE
push_img = b""
for chunk in message_content.iter_content():
push_img += chunk #Image iter_pousser avec du contenu_Remplacer séquentiellement img
push_img = base64.b64encode(push_img).decode("utf-8") #Base64 encodée pour passer l'API
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