ダウンロード機能の修正とモジュール化
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
として保存
次に顔を検出したらこれを呼び出すようにする