from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage, ) app = Flask(__name__) line_bot_api = LineBotApi('') handler = WebhookHandler('') @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 try: handler.handle(body, signature) except InvalidSignatureError: print("Invalid signature. Please check your channel access token/channel secret.") 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)) ''' 當用戶發照片的時候,將用戶照片從line上下載回來,存到本地端 line_bot_api get content python ''' from linebot.models import ImageMessage import boto3 @handler.add(MessageEvent,message=ImageMessage) def handle_image_message(event): # 麻煩line_bot_api去跟line要照片回來,並且存回本地端 message_content = line_bot_api.get_message_content(event.message.id) file_name= event.message.id +'.jpg' with open(file_name, 'wb') as fd: for chunk in message_content.iter_content(): fd.write(chunk) ''' 用python的套件boto3將圖片上傳到S3 python boto3 upload object to s3 ''' s3_client= boto3.client('s3') # s3_client.upload_file(file_name, bucket, object_name) s3_client.upload_file(file_name,'iii-tutorial-v2','student99/'+file_name) ''' 未來做圖片分析 ''' line_bot_api.reply_message( event.reply_token, TextSendMessage(text="已收到圖片")) if __name__ == "__main__": app.run('0.0.0.0',port=28888)