Gmail読み上げとメールのお知らせを作る
from gmail_utils import gmail_init, gmail_get_latest_unread_message_body from pdf_downloader import find_preview_link, download_pdf def save_email_body_to_text(body, filename="email_body.txt"): with open(filename, "w", encoding="utf-8") as file: file.write(body) def main(): # Gmail API サービスを初期化 service = gmail_init() # ラベル ID を指定して最新の未読メール本文とURLを取得 body, urls = gmail_get_latest_unread_message_body(service, "ラベルID") if urls: for url in urls: print(f"プレビューリンクを検索するURL: {url}") # プレビューリンクを取得 preview_url = find_preview_link(url) if preview_url: print(f"プレビューリンク: {preview_url}") # プレビューリンクからPDFファイルのダウンロードを試みる download_pdf(preview_url, file_path="downloaded_file.pdf") else: print("プレビューリンクが見つかりませんでした。") else: print("メールにURLが見つかりませんでした。") # メール本文をテキストファイルに保存 save_email_body_to_text(body) if __name__ == "__main__": main()
でテキストファイルの作成とPDF取得ができているので
お知らせメッセージの
notice.wavを再生する
GPTによれば
pip install playsound
でインストールし
コードを変更する
from playsound import playsound from gmail_utils import gmail_init, gmail_get_latest_unread_message_body from pdf_downloader import find_preview_link, download_pdf def save_email_body_to_text(body, filename="email_body.txt"): with open(filename, "w", encoding="utf-8") as file: file.write(body) def main(): # Gmail API サービスを初期化 service = gmail_init() # ラベル ID を指定して最新の未読メール本文とURLを取得 body, urls = gmail_get_latest_unread_message_body(service, "ラベルID") # 未読メールがある場合は音声ファイルを再生 if body: playsound('notice.wav') if urls: for url in urls: print(f"プレビューリンクを検索するURL: {url}") # プレビューリンクを取得 preview_url = find_preview_link(url) if preview_url: print(f"プレビューリンク: {preview_url}") # プレビューリンクからPDFファイルのダウンロードを試みる download_pdf(preview_url, file_path="downloaded_file.pdf") else: print("プレビューリンクが見つかりませんでした。") else: print("メールにURLが見つかりませんでした。") # メール本文をテキストファイルに保存 save_email_body_to_text(body) else: print("未読メールはありません。") if __name__ == "__main__": main()
変更点は
def save_email_body_to_text(body, filename="email_body.txt"): with open(filename, "w", encoding="utf-8") as file: file.write(body)
で音声ファイルを読み込んでいること
と
Main.pyの中で
# 未読メールがある場合は音声ファイルを再生 if body: playsound('notice.wav')
を追加して音声を出している
次にPDFの文字数を調べて100文字以上なら
音声でPDFの内容を確認するように促す
あとはメール本文の読み上げ処理だけ
PyMuPDFを使い
文字数をカウント、文字数が100文字以上ならPDFを確認する音声を再生するようにコード変更
import fitz # PyMuPDF from playsound import playsound from gmail_utils import gmail_init, gmail_get_latest_unread_message_body from pdf_downloader import find_preview_link, download_pdf def save_email_body_to_text(body, filename="email_body.txt"): with open(filename, "w", encoding="utf-8") as file: file.write(body) def count_pdf_characters(file_path): doc = fitz.open(file_path) text = "" for page in doc: text += page.get_text() return len(text) def main(): # Gmail API サービスを初期化 service = gmail_init() # ラベル ID を指定して最新の未読メール本文とURLを取得 body, urls = gmail_get_latest_unread_message_body(service, "ラベルID") # 未読メールがある場合は音声ファイルを再生 if body: playsound('notice.wav') if urls: for url in urls: print(f"プレビューリンクを検索するURL: {url}") # プレビューリンクを取得 preview_url = find_preview_link(url) if preview_url: print(f"プレビューリンク: {preview_url}") # プレビューリンクからPDFファイルのダウンロードを試みる download_pdf(preview_url, file_path="downloaded_file.pdf") # PDFファイルから文字数をカウント char_count = count_pdf_characters("downloaded_file.pdf") print(f"PDF内の文字数: {char_count}") # 文字数が100文字以上の場合は別の音声ファイルを再生 if char_count >= 100: playsound('notice_pdf.wav') else: print("プレビューリンクが見つかりませんでした。") else: print("メールにURLが見つかりませんでした。") # メール本文をテキストファイルに保存 save_email_body_to_text(body) else: print("未読メールはありません。") if __name__ == "__main__": main()
あとはvoicevoxの処理のみ
とりあえずdockerを起動させる
docker run -d -p '192.168.1.69:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest
でやったら普通に音声が再生できたので
単純に負荷でdockerが落ちてたみたい
文章を音声で読み上げしたが
どうやら最初の文章に日付と宛先の名前がくっついている
毎回main3.pyを実行するたびに他のメールでも同じなので
最初の文章を削除する