Gmail読み上げとメールのお知らせを作る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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によれば
1 | pip install playsound |
でインストールし
コードを変更する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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() |
変更点は
1 2 3 | 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の中で
1 2 3 | # 未読メールがある場合は音声ファイルを再生 if body: playsound( 'notice.wav' ) |
を追加して音声を出している
次にPDFの文字数を調べて100文字以上なら
音声でPDFの内容を確認するように促す
あとはメール本文の読み上げ処理だけ
PyMuPDFを使い
文字数をカウント、文字数が100文字以上ならPDFを確認する音声を再生するようにコード変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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を起動させる
1 | docker run -d -p '192.168.1.69:50021:50021' voicevox /voicevox_engine :cpu-ubuntu20.04-latest |
でやったら普通に音声が再生できたので
単純に負荷でdockerが落ちてたみたい
文章を音声で読み上げしたが
どうやら最初の文章に日付と宛先の名前がくっついている
毎回main3.pyを実行するたびに他のメールでも同じなので
最初の文章を削除する