URL の書き方
合言葉://localhost:8083(「合言葉」が X-API-Key として送信されます)
合言葉://127.0.0.1:8083(localhost と同じです。どちらでも使えます)
⚠️ 下記スクリプトには API キーを直接書き込みます。キーを記入したファイルは、絶対にクラウドストレージや公開リポジトリへアップロードしないでください。キーが漏洩すると不正利用や高額請求の恐れがあります。
server.py(ローカル翻訳サーバー)
from flask import Flask, request, jsonify
from flask_cors import CORS
from google import genai
import json, urllib.request
# === 設定(自分の値に書き換える)===
GEMINI_API_KEY = 'YOUR_GEMINI_API_KEY' # Gemini API キー
SONIOX_API_KEY = 'YOUR_SONIOX_API_KEY' # Soniox を使う場合のみ
VALID_API_KEY = 'my-secret' # フロントの「合言葉://」と一致させる
MODEL = 'gemini-3.1-flash-lite'
app = Flask(__name__)
CORS(app)
client = genai.Client(api_key=GEMINI_API_KEY)
SYSTEM_PROMPT = """あなたはリアルタイム字幕の翻訳エンジンです。
入力テキストを指定された言語へ自然に翻訳してください。
出力ルール:
- JSON のみを出力:{"translation": "..."}
- 他のキー、Markdown、説明文は一切出力しない。
- 原文に主語が明示されていない場合、主語を補わない。"""
def translate_one(text, lang):
resp = client.models.generate_content(
model=MODEL,
contents=f"翻訳先の言語: {lang}\n原文:\n{text}",
config={'system_instruction': SYSTEM_PROMPT,
'response_mime_type': 'application/json', 'temperature': 0.3})
data = json.loads(resp.text or '{}')
out = data.get('translation', '')
return out if isinstance(out, str) else ''
@app.post('/translate')
def translate():
if request.headers.get('X-API-Key') != VALID_API_KEY:
return jsonify({'error': 'Unauthorized'}), 401
data = request.get_json(silent=True) or {}
text = (data.get('text') or '').strip()
targets = data.get('targetLangs') or []
seq = data.get('sequenceId')
if not text or not isinstance(targets, list):
return jsonify({'error': 'Invalid parameters', 'sequenceId': seq}), 400
try:
translations = [translate_one(text, lang) for lang in targets]
except Exception as e:
app.logger.error('[translate] %s', e)
return jsonify({'error': 'Translation failed', 'sequenceId': seq}), 500
return jsonify({'translations': translations, 'sequenceId': seq})
@app.get('/soniox/token')
def soniox_token():
if request.headers.get('X-API-Key') != VALID_API_KEY:
return jsonify({'error': 'Unauthorized'}), 401
if not SONIOX_API_KEY:
return jsonify({'error': 'Server configuration error'}), 500
try:
req = urllib.request.Request(
'https://api.soniox.com/v1/auth/temporary-api-key',
data=json.dumps({'usage_type': 'transcribe_websocket',
'expires_in_seconds': 60}).encode(),
headers={'Authorization': f'Bearer {SONIOX_API_KEY}',
'Content-Type': 'application/json'}, method='POST')
with urllib.request.urlopen(req) as r:
d = json.loads(r.read())
except Exception as e:
app.logger.error('[soniox] %s', e)
return jsonify({'error': 'Failed to grant Soniox key'}), 500
temp = d.get('api_key') or d.get('key') or d.get('access_token')
return jsonify({'key': temp, 'expiresIn': d.get('expires_in_seconds', 60),
'tokenType': 'soniox'})
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8083)
使い方
- Python(3.10 以上推奨)をインストール(Windows はインストール時「Add Python to PATH」に必ずチェック)
pip install flask flask-cors google-genai で依存をインストール
- 上のコードを
server.py に貼り付け、3 つのキーを記入
python server.py で起動
- このリンク欄に
合言葉://localhost:8083 を入力(「合言葉」は VALID_API_KEY と同じ文字列)