test_api_client.py•2.97 kB
#!/usr/bin/env python3
"""
NijiVoiceClientの動作をテストするためのスクリプト
"""
import asyncio
import os
import logging
from dotenv import load_dotenv
from logger import setup_logging
from nijivoice.api import NijiVoiceClient
from nijivoice.models import VoiceGenerationRequest
# ロギングの設定
logger = setup_logging(level=logging.INFO)
async def test_get_voice_actors(client):
"""Voice Actor一覧を取得してみる"""
try:
logger.info("Voice Actor一覧を取得しています...")
actors = await client.get_voice_actors()
logger.info(f"取得成功: {len(actors)}人のVoice Actorが見つかりました")
for i, actor in enumerate(actors):
logger.info(f" {i+1}. {actor.name} (ID: {actor.id})")
return actors
except Exception as e:
logger.error(f"Voice Actor一覧の取得に失敗しました: {str(e)}")
return []
async def test_generate_voice(client, actor_id, text):
"""音声生成をテストする"""
try:
logger.info(f"「{text}」の音声を生成しています...")
request = VoiceGenerationRequest(
id=actor_id,
script=text,
speed=1.0,
emotional_level=1.0,
sound_duration=1.0,
format="mp3"
)
response = await client.generate_voice(request=request)
logger.info(f"音声生成成功: {response}")
return response
except Exception as e:
logger.error(f"音声生成に失敗しました: {str(e)}")
return None
async def test_get_balance(client):
"""クレジット残高を取得する"""
try:
logger.info("クレジット残高を取得しています...")
balance = await client.get_balance()
credit = balance.get_credit()
logger.info(f"クレジット残高: {credit}")
return credit
except Exception as e:
logger.error(f"クレジット残高の取得に失敗しました: {str(e)}")
return None
async def main():
"""
メイン関数 - 各API機能をテストする
"""
# 環境変数から設定をロード
load_dotenv()
api_key = os.environ.get("NIJIVOICE_API_KEY")
if not api_key:
logger.error("NIJIVOICE_API_KEY環境変数が設定されていません")
return
# クライアントを初期化
client = NijiVoiceClient(api_key=api_key)
logger.info("NijiVoiceClientを初期化しました")
# Voice Actor一覧を取得
actors = await test_get_voice_actors(client)
# 音声生成のテスト
if actors:
first_actor = actors[0]
await test_generate_voice(client, first_actor.id, "これはテスト音声です")
# クレジット残高の取得
await test_get_balance(client)
if __name__ == "__main__":
# 非同期処理を実行
asyncio.run(main())