音声データにしてMP3ファイルとして保存するPythonコード(Google Text-to-Speech)
Pythonのテキスト読み上げライブラリであるgTTS
(Google Text-to-Speech) を使用できます。このライブラリを使ってデータを音声に変換し、MP3ファイルとして保存します。
Contents
必要なライブラリのインストール
pip install gtts
コード
※今回は、過去に投稿した天気データに追記して音声にします。
import requests
import datetime
from openpyxl import Workbook, load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
import os
from gtts import gTTS
# OpenWeatherMap APIから天気データを取得する関数
def get_weather_data(api_key, city):
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
response = requests.get(url)
data = response.json()
return {
"date": data["dt"],
"city": data["name"],
"temperature": data["main"]["temp"],
"feels_like": data["main"]["feels_like"],
"temp_min": data["main"]["temp_min"],
"temp_max": data["main"]["temp_max"],
"pressure": data["main"]["pressure"],
"humidity": data["main"]["humidity"],
"weather_main": data["weather"][0]["main"],
"weather_description": data["weather"][0]["description"],
"wind_speed": data["wind"]["speed"],
"wind_deg": data["wind"]["deg"],
"clouds_all": data["clouds"]["all"],
"sunrise": data["sys"]["sunrise"],
"sunset": data["sys"]["sunset"]
}
# 列の幅を調整する関数
def adjust_column_width(ws):
for col in ws.columns:
max_length = 0
column = col[0].column_letter # 列の名前 (例: 'A', 'B', 'C')
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(cell.value)
except:
pass
adjusted_width = (max_length + 2)
ws.column_dimensions[column].width = adjusted_width
# Excelファイルにデータを書き込む関数
def write_to_excel(data, file_name="weather_data.xlsx"):
# ファイルが存在するか確認
if os.path.exists(file_name):
wb = load_workbook(file_name)
ws = wb.active
else:
wb = Workbook()
ws = wb.active
ws.title = "Weather Data"
# ヘッダーを追加
headers = ["日付", "都市", "気温", "体感気温", "最低気温", "最高気温",
"気圧", "湿度", "天気", "天気詳細",
"風速", "風向", "雲量", "日の出", "日の入り"]
for col_num, header in enumerate(headers, 1):
col_letter = get_column_letter(col_num)
ws[f"{col_letter}1"] = header
ws[f"{col_letter}1"].font = Font(bold=True)
# データを追加
values = [
[data["date"], data["city"], data["temperature"], data["feels_like"], data["temp_min"],
data["temp_max"], data["pressure"], data["humidity"], data["weather_main"],
data["weather_description"], data["wind_speed"], data["wind_deg"],
data["clouds_all"], data["sunrise"], data["sunset"]]
]
for row in values:
ws.append(row)
# 列の幅を調整
adjust_column_width(ws)
# Excelファイルを保存
wb.save(file_name)
print(f"Data written to {file_name}")
# 天気データを音声に変換して保存する関数
def weather_to_speech(data, file_name="weather_data.mp3"):
text = f"""天気情報:
日付: {data['date']}
都市: {data['city']}
気温: {data['temperature']}度
体感気温: {data['feels_like']}度
最低気温: {data['temp_min']}度
最高気温: {data['temp_max']}度
気圧: {data['pressure']}ヘクトパスカル
湿度: {data['humidity']}パーセント
天気: {data['weather_main']}
天気詳細: {data['weather_description']}
風速: {data['wind_speed']}メートル毎秒
風向: {data['wind_deg']}度
雲量: {data['clouds_all']}パーセント
日の出: {data['sunrise']}
日の入り: {data['sunset']}
"""
tts = gTTS(text=text, lang='ja')
tts.save(file_name)
print(f"Speech data saved as {file_name}")
if __name__ == "__main__":
# 天気のAPIキーを記入する
api_key = ""
city = "Tokyo"
weather_data = get_weather_data(api_key, city)
# Unix timestampを日付文字列に変換
weather_data["date"] = datetime.datetime.fromtimestamp(weather_data["date"]).strftime('%Y-%m-%d %H:%M:%S')
weather_data["sunrise"] = datetime.datetime.fromtimestamp(weather_data["sunrise"]).strftime('%Y-%m-%d %H:%M:%S')
weather_data["sunset"] = datetime.datetime.fromtimestamp(weather_data["sunset"]).strftime('%Y-%m-%d %H:%M:%S')
write_to_excel(weather_data)
weather_to_speech(weather_data)
ディスカッション
コメント一覧
まだ、コメントがありません