Spaces:
Running
Running
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どちらにも対応) | |
def index(): | |
return render_template('index.html') | |
# フィードバック画面(GET/POSTどちらにも対応) | |
def feedback(): | |
return render_template("feedback.html") | |
# 会話詳細画面(GET/POSTどちらにも対応) | |
def talk_detail(): | |
return render_template("talkDetail.html") | |
# 音声データアップロード用エンドポイント | |
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) | |