前提・実現したいこと
まずはこのページを見てくださりありがとうございます。
ページの説明が長く、申し訳ございません。
アドバイス、助言くださると大変助かります。
現在LINE Messaging APIを使用して、ユーザからのテキストに対して、センサ情報を返すプログラムをherokuにあげて常時起動させています。
ある場所の混雑度をセンサで観測し、そこの混雑度をラインに送るといったことです。
(サーバは用意しています。)
構図はこんな感じ
・サーバー
・・ラインプログラム(herokuで動作)→app.py
・・ラズベリーパイのセンサから受け取ったテキストデータ→test.txt
・・センサから受け取ったデータを割合として出した数値→test.py
そして本題ですが、やりたいことと致しましては、app.pyがherokuで動作しているため、サーバ内にある、test.py、test.txtの数値を参照できないという問題があり、herokuを使わずにサーバ上でプログラムを常に動作させたいということです。
app.pyはLINE Messaging APIのサンプルプログラムをいただき、少し編集したものです
サーバについて無知なもので数時間悩みましたが解決策がうまくいかず、質問させていただいております。
LINEのWebhook URL は現在herokuのものを登録しています。ここを変えなければいけないことはわかっているのですが、何に変えればいいのか、その後の流れがいまいち掴めず、困っています。
調べたところ自前のサーバを使う際にはPHPを記述しなければならないのでしょうか?
該当のソースコード
#app.pyのコード
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,ImageSendMessage,
)
import datetime
import test #test.pyをインポート
app = Flask(__name__)
line_bot_api = LineBotApi('')
handler = WebhookHandler('')
@app.route("/")
def test():
return "ok"
@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):
dt_now = datetime.datetime.now()
jst_hour=dt_now.hour+9
if (0<=jst_hour<=9) or (16<=jst_hour):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=f"混雑度提供時間は10時〜15時です。"))
else:
if event.message.text=="A":
pec=test.main()
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=pec))#test.pyの値を参照できていないため、ここで既読無視状態になる
elif event.message.text=="B":
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=f"現在のBの混雑度は??%です。"))
elif event.message.text=="C":
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=f"現在のCの混雑度は??%です。"))
else:
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=f"入力が間違っています。もう一度入力してください"))
if __name__ == "__main__":
app.run()
#test.pyのコード
import re
import ast
import statistics
def main():
with open('/home/test_temp.txt', 'r') as f:
new_temp = (ast.literal_eval(re.findall('\[[^\]]*]', f.read())[-1]))
ave_temp = statistics.mean(new_temp)
min_temp = min(new_temp)
percentage = int((min_temp / ave_temp)*100)
#print(new_temp)
#print(ave_temp)
#print(min_temp)
#print(str(percentage) + '%')
#この場合だと81の値が返り値となる
return percentage
if __name__ == "__main__":
main()
[15.75, 16.50, 18.00, 18.00, 19.00, 21.50, 23.75, 25.50,
16.00, 16.25, 17.25, 18.00, 19.50, 22.75, 23.25, 23.75,
15.00, 16.00, 16.50, 18.00, 19.50, 22.50, 22.50, 22.25,
15.00, 15.25, 15.50, 16.50, 18.50, 21.00, 20.00, 19.00,
15.00, 15.50, 15.25, 15.50, 15.75, 15.25, 16.00, 15.75,
15.75, 14.75, 15.50, 16.00, 15.50, 16.25, 15.50, 16.00,
14.50, 14.75, 15.25, 15.00, 15.50, 15.75, 15.75, 15.50,
14.25, 14.00, 15.00, 14.50, 14.75, 14.25, 14.25, 14.75,
]
[16.25, 16.75, 17.75, 18.25, 19.25, 21.75, 23.75, 26.00,
15.50, 15.75, 17.00, 18.00, 19.25, 22.25, 23.25, 24.00,
15.50, 15.50, 16.50, 18.00, 19.25, 22.50, 22.50, 22.75,
15.00, 15.00, 16.00, 16.75, 18.50, 21.25, 20.25, 18.25,
15.50, 15.25, 16.00, 15.50, 16.00, 15.25, 15.50, 15.75,
14.75, 15.00, 15.50, 15.50, 15.75, 16.25, 15.50, 16.00,
15.25, 15.25, 15.25, 16.00, 15.75, 15.50, 15.25, 15.00,
14.75, 13.75, 14.50, 15.25, 15.00, 14.00, 14.25, 14.25,
]
[16.50, 16.75, 17.75, 18.50, 18.75, 21.50, 23.75, 25.75,
15.50, 16.00, 16.75, 18.25, 19.50, 22.75, 23.25, 23.50,
15.25, 15.25, 16.25, 17.75, 19.50, 22.25, 22.75, 22.00,
14.75, 14.75, 15.25, 16.25, 18.50, 21.25, 19.75, 18.00,
15.25, 15.25, 15.25, 15.50, 15.75, 15.00, 15.75, 16.00,
15.25, 15.00, 15.75, 15.50, 15.50, 16.50, 14.75, 15.50,
15.00, 15.50, 15.50, 15.25, 15.75, 15.25, 15.50, 15.25,
14.75, 13.75, 15.50, 15.00, 15.00, 14.00, 14.75, 13.75,
]
[15.75, 16.00, 17.75, 18.00, 19.50, 21.50, 23.50, 25.50,
16.00, 15.75, 17.00, 17.75, 19.25, 22.50, 23.50, 23.25,
15.25, 15.50, 16.50, 17.25, 19.25, 22.50, 22.25, 22.00,
14.75, 15.25, 15.75, 16.75, 18.75, 20.50, 19.75, 18.25,
15.25, 15.25, 15.25, 15.50, 15.75, 15.25, 15.00, 15.50,
15.25, 14.75, 15.25, 15.25, 15.25, 16.00, 15.50, 15.50,
15.00, 14.50, 15.00, 15.00, 15.75, 15.25, 15.50, 15.25,
14.50, 14.00, 15.25, 14.25, 15.00, 13.75, 14.25, 14.25,
]
[16.75, 16.50, 17.50, 17.75, 19.00, 21.50, 23.75, 25.75,
16.00, 15.25, 16.50, 17.75, 19.75, 22.75, 23.25, 23.75,
15.25, 15.75, 16.50, 17.50, 19.25, 22.25, 22.50, 22.00,
15.00, 15.50, 15.50, 16.75, 18.50, 21.00, 20.00, 18.25,
15.00, 15.25, 15.25, 15.50, 15.50, 15.00, 15.75, 15.75,
15.25, 14.50, 15.75, 16.00, 15.50, 15.75, 15.50, 15.50,
15.25, 15.25, 15.00, 14.50, 15.75, 14.75, 15.50, 14.75,
14.00, 14.00, 15.00, 14.50, 15.00, 13.75, 13.75, 13.75,
]