Python スクリーンショットをまとめてPDFファイルにして保存する方法 pillow
Dori
よろずブログ
今回は、Discordのチャンネルにメッセージを送ったらAnkiのデッキに自動で送ったメッセージが追加されるプログラミングを書いてみました。
import os
import re
import base64
from google.cloud import texttospeech
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='!', intents=intents)
# Google CloudのAPIキーのパスを設定
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/your/google-cloud-api-key.json'
# Google Text-to-Speechのクライアントを初期化
tts_client = texttospeech.TextToSpeechClient()
# テキストから音声を生成し、base64形式でエンコードする関数
def synthesize_text_to_base64(text):
input_text = texttospeech.SynthesisInput(text=text)
voice = texttospeech.VoiceSelectionParams(
language_code="en-US", ssml_gender=texttospeech.SsmlVoiceGender.FEMALE
)
audio_config = texttospeech.AudioConfig(
audio_encoding=texttospeech.AudioEncoding.MP3
)
response = tts_client.synthesize_speech(
input=input_text, voice=voice, audio_config=audio_config
)
audio_base64 = base64.b64encode(response.audio_content).decode("utf-8")
return audio_base64
# Ankiにカードを追加する関数(音声の追加を含む)
def add_card_with_audio(front, back, audio_base64, deck):
note = {
"modelName": "Basic",
"fields": {
"Front": front,
"Back": f"{back}<br><br>[sound:audio.mp3]",
"MyMedia": audio_base64
},
"tags": ["discord"],
"deckName": deck
}
payload = {
"action": "addNote",
"version": 6,
"params": {
"note": note
}
}
response = requests.post(anki_connect_url, json=payload)
return response.json()
# 英語のメッセージかどうかを判断する関数
def is_english(text):
if re.match("^[A-Za-z]*$", text):
return True
return False
# 指定されたチャンネルでメッセージが送信されたときのイベント
@bot.event
async def on_message(message):
# ボットのメッセージは無視
if message.author == bot.user:
return
# 指定されたチャンネルでのみメッセージを監視
if message.channel.id == channel_id:
front = message.content
back = f"From: {message.author.name}#{message.author.discriminator}\n\nDate: {message.created_at}"
# メッセージが英語である場合、音声を取得してカードに追加
if is_english(front):
audio_base64 = synthesize_text_to_base64(front)
add_card_with_audio(front, back, audio_base64, deck_name)
else:
add_card(front, back, deck_name)
await bot.process_commands(message)
bot.run(bot_token)
Google CloudのText-to-Speech APIは使用料金がかかります。無料枠のクレジットも用意されていますが、詳しくは公式ホームページで確認してください。
Ankiって語学学習には最高のアプリだけどアプリ開いて単語追加するの面倒ですよね。音声も入れた方が絶対覚えやすいので今回は音声も自動で入れるようなコードにしてみたので参考にしてみてください。
筆者はプログラミングど素人なので無料で音声追加できるアイディアやコードのリファクタリングとかあったらコメントで教えてくれると喜びます。