//AdSenseにリンク

音声データにしてMP3ファイルとして保存するPythonコード(Google Text-to-Speech)

Pythonのテキスト読み上げライブラリであるgTTS (Google Text-to-Speech) を使用できます。このライブラリを使ってデータを音声に変換し、MP3ファイルとして保存します。

必要なライブラリのインストール

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)

python