ダウンロード機能の修正とモジュール化
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() |
としたらリンクがエラーになる
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() |
だと問題ない
とりあえず
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 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 import subprocess import pygame import time def generate_and_play_audio_from_text(text): # JSONファイルを作成するためのcurlコマンド command_json = [ "curl" , "-s" , "-X" , "POST" , "192.168.1.69:50021/audio_query?speaker=1" , "--get" , "--data-urlencode" , f "text={text}" ] # 音声ファイルを作成するためのcurlコマンド command_audio = [ "curl" , "-s" , "-H" , "Content-Type: application/json" , "-X" , "POST" , "-d" , "@query.json" , "192.168.1.69:50021/synthesis?speaker=1" ] # JSONファイルと音声ファイルを作成 with open ( 'query.json' , 'w' ) as file : subprocess.run(command_json, stdout= file ) with open ( 'audio_output.wav' , 'wb' ) as file : subprocess.run(command_audio, stdout= file ) # Pygameで音声ファイルを再生 pygame.init() pygame.mixer.init() sound = pygame.mixer.Sound( "audio_output.wav" ) sound.play() while pygame.mixer.get_busy(): time . sleep (0.1) 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' ) generate_and_play_audio_from_text(body) 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が見つかりませんでした。" ) else : print( "未読メールはありません。" ) if __name__ == "__main__" : main() |
とすることで
メールの読み上げと
PDFのダウンロードができた
また長文のPDFに関しては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 58 59 | import fitz from playsound import playsound import subprocess import pygame import time # テキストから音声を生成して再生する関数 def generate_and_play_audio_from_text(text): command_json = [ "curl" , "-s" , "-X" , "POST" , "192.168.1.69:50021/audio_query?speaker=1" , "--get" , "--data-urlencode" , f "text={text}" ] command_audio = [ "curl" , "-s" , "-H" , "Content-Type: application/json" , "-X" , "POST" , "-d" , "@query.json" , "192.168.1.69:50021/synthesis?speaker=1" ] with open ( 'query.json' , 'w' ) as file : subprocess.run(command_json, stdout= file ) with open ( 'audio_output.wav' , 'wb' ) as file : subprocess.run(command_audio, stdout= file ) pygame.init() pygame.mixer.init() sound = pygame.mixer.Sound( "audio_output.wav" ) sound.play() while pygame.mixer.get_busy(): time . sleep (0.1) # PDFファイルから文字数をカウントする関数 def count_pdf_characters(file_path): doc = fitz. open (file_path) text = "" for page in doc: text += page.get_text() return len(text) # メールの処理を行う関数 def process_email(service, label_id): from gmail_utils import gmail_get_latest_unread_message_body from pdf_downloader import find_preview_link, download_pdf body, urls = gmail_get_latest_unread_message_body(service, label_id) if body: playsound( 'notice.wav' ) generate_and_play_audio_from_text(body) if urls: for url in urls: preview_url = find_preview_link(url) if preview_url: download_pdf(preview_url, "downloaded_file.pdf" ) char_count = count_pdf_characters( "downloaded_file.pdf" ) if char_count >= 100: playsound( 'notice_pdf.wav' ) else : print( "プレビューリンクが見つかりませんでした。" ) else : print( "メールにURLが見つかりませんでした。" ) else : print( "未読メールはありません。" ) |
として
1 | email_processor.py |
として保存
次に顔を検出したらこれを呼び出すようにする