JusTalk / app.py
rein0421's picture
Update app.py
f3e5312 verified
raw
history blame
2.52 kB
from flask import Flask, request, jsonify, render_template
import base64
import os
import string
import random
from datetime import datetime
app = Flask(__name__)
# トップページ(GET/POSTどちらにも対応)
@app.route('/')
@app.route('/index', methods=['GET', 'POST'])
def index():
return render_template('index.html')
# フィードバック画面(GET/POSTどちらにも対応)
@app.route('/feedback', methods=['GET', 'POST'])
def feedback():
return render_template("feedback.html")
# 会話詳細画面(GET/POSTどちらにも対応)
@app.route('/talk_detail', methods=['GET', 'POST'])
def talk_detail():
return render_template("talkDetail.html")
# 音声データアップロード用エンドポイント
@app.route('/upload_audio', methods=['POST'])
def upload_audio():
try:
data = request.get_json()
if not data:
return jsonify({"error": "JSONが送信されていません"}), 400
audio_data = data.get('audio_data')
if not audio_data:
return jsonify({"error": "音声データが送信されていません"}), 400
# Base64デコード
try:
audio_binary = base64.b64decode(audio_data)
except Exception as decode_err:
return jsonify({"error": "Base64デコードに失敗しました", "details": str(decode_err)}), 400
# 書き込み用ディレクトリとして /tmp/data を使用(/tmp は書き込み可能)
persist_dir = "/tmp/data"
os.makedirs(persist_dir, exist_ok=True)
filepath = os.path.join(persist_dir, generate_filename(6)) # ここだけ変更しました
with open(filepath, 'wb') as f:
f.write(audio_binary)
return jsonify({"message": "音声が正常に保存されました", "filepath": filepath}), 200
except Exception as e:
app.logger.error("エラー: %s", str(e))
return jsonify({"error": "サーバー内部エラー", "details": str(e)}), 500
def generate_random_string(length):
letters = string.ascii_letters + string.digits
return ''.join(random.choice(letters) for i in range(length))
def generate_filename(random_length):
random_string = generate_random_string(random_length)
current_time = datetime.now().strftime("%Y%m%d%H%M%S")
filename = f"{current_time}_{random_string}.wav"
return filename
if __name__ == '__main__':
port = int(os.environ.get("PORT", 7860))
app.run(debug=True, host="0.0.0.0", port=port)