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からメッセージを取得して、未読メッセージを音声で読み上げ、
その後に音声ファイルを整理する一連の処理を実行