ダウンロード機能の修正とモジュール化
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()
としたらリンクがエラーになる
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()
だと問題ない
とりあえず
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を見るように促すようにした
あとは顔を認識したら起動するようにする
まずはこれをモジュールにする
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("未読メールはありません。")
として
email_processor.py
として保存
次に顔を検出したらこれを呼び出すようにする