Firestore DBからメッセージ取得と読み上げ

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です