前提・実現したいこと
初めてLINEbotをPython,Herokuを用いて作っているのですが、フォローイベントの際にその人のユーザーID名のスキーマをPostgreSQlで作成する方法が分かりません。
該当のソースコード
Python
1from flask import Flask,request,abort 2from linebot import LineBotApi,WebhookHandler 3from linebot.exceptions import InvalidSignatureError 4from linebot.models import MessageEvent,TextMessage,TextSendMessage,FollowEvent 5import os 6import psycopg2 7 8app=Flask(__name__) 9 10#環境変数の取得 11YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"] 12YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"] 13line_bot_api=LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) 14handler=WebhookHandler(YOUR_CHANNEL_SECRET) 15 16@app.route("/callback",methods=["POST"]) 17def callback(): 18 signature=request.headers["X-Line-Signature"] 19 body=request.get_data(as_text=True) 20 app.logger.info("Request body"+body) 21 try: 22 handler.handle(body,signature) 23 except InvalidSignatureError: 24 abort(400) 25 return "OK" 26 27@handler.add(FollowEvent) 28def handle_follow(event): 29 your_id = event.source.user_id 30 message = "君のユーザーIDは{}だよ".format(your_id) 31 line_bot_api.reply_message(event.reply_token,TextSendMessage(text=message)) 32 #まだその人のスキーマが作成されていなければ新規作成する。 33 with psycopg2.connect("dbname=linebot user=postgres password=pass") as conn: 34 with conn.cursor() as cur: 35 cur.execute("CREATE SCHEMA IF NOT EXISTS {}".format(your_id)) 36 37if __name__=="__main__": 38 port=int(os.getenv("PORT",5000)) 39 app.run(host="0.0.0.0",port=port)
試したこと
スキーマの作成だけでなくデータベースからのデータ取得などもできるか確認しましたができませんでした。
しかし「君のユーザーIDは○○だよ」というメッセージは届くので、Bot自体は動いていると思います。
また、with文のところのみを別に実行してみたところ、無事にスキーマを作成することが出来ました。
なのでAPIの使いかたを間違えているのかと思いましたが、リファレンスを読んでも原因を見つけることができませんでした。(もしかすると見落としてしまっているのかもしれません...。)
何か分かる方がいらっしゃれば、よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
同階層のファイルです。
Procfile
web: python main.py
requirements.txt
Flask==0.12 line-bot-sdk==1.8.0 psycopg2==2.8.6
runtime.txt
python-3.9.2
回答2件
あなたの回答
tips
プレビュー