Firestore DBからメッセージ取得と読み上げ
import warnings
from google.cloud import firestore
import datetime
import absl.logging
import requests
import os
import glob
from playsound import playsound
# 警告を無視する設定
warnings.filterwarnings("ignore", category=UserWarning, module="google.cloud.firestore_v1.base_collection")
# Firestore クライアントの初期化
db = firestore.Client.from_service_account_json("serviceAccountKey.json")
# VoiceVoxの設定
VOICEVOX_API_URL = "http://192.168.1.69:50021"
def synthesize_speech(text, speaker=1):
"""指定されたテキストを音声に合成してファイル名を返す関数"""
params = {'text': text, 'speaker': speaker}
response = requests.post(f"{VOICEVOX_API_URL}/audio_query", params=params)
if response.status_code == 200:
query_data = response.json()
synthesis_response = requests.post(f"{VOICEVOX_API_URL}/synthesis", params={'speaker': speaker}, json=query_data)
if synthesis_response.status_code == 200:
filename = f"event_voice_{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.wav"
with open(filename, "wb") as f:
f.write(synthesis_response.content)
return filename
return None
def play_audio_file(filename):
"""音声ファイルを再生する関数"""
if os.path.exists(filename):
playsound(filename)
def read_unread_messages():
messages_ref = db.collection("messages").where("user_id", "==", target_user_id).where("read", "==", False)
unread_messages = messages_ref.stream()
for message in unread_messages:
message_data = message.to_dict()
message_text = message_data["text"]
# 音声合成してファイルを生成
audio_filename = synthesize_speech(message_text)
if audio_filename:
# 音声ファイルを再生
play_audio_file(audio_filename)
# メッセージを既読に更新
message.reference.update({"read": True})
# 生成された音声ファイルを後でクリーンアップ
os.remove(audio_filename)
# 特定のユーザーIDを指定してメッセージを取得して読み上げる
target_user_id = ""
read_unread_messages()
Firestoreからメッセージを取得して、未読メッセージを音声で読み上げ、
その後に音声ファイルを整理する一連の処理を実行