ツイート→絵日記 を作るツール #AI - Qiita

1.png

概要

本記事では、X(旧Twitter)から取得したツイートと天気データを組み合わせて日記を生成し、さらにその日記から画像生成に必要な要素を抽出するツールの実装について解説します。このツールは、Pythonを使用して構築されており、外部APIを活用してデータ取得や生成を行います。

ソース

主な機能

  1. ツイート取得

    • 指定されたユーザーのツイートを取得します。
    • モックデータを使用するオプションもあります。
  2. 天気データ取得

    • 指定された期間と場所の天気データを取得します。
  3. 日記生成

    • ツイート内容を日記形式に変換します。
  4. 画像生成

    • 日記の内容からシチュエーションや登場人物を抽出し、画像生成APIを利用して画像を生成します。
  5. ファイル出力

    • 生成された日記と画像を指定のディレクトリに保存します。

処理の流れ

1. 引数の解析

プログラムはコマンドライン引数を受け取り、モックデータを使用するか、実際のデータを使用するかを切り替えます。

def parse_args():
    parser = ArgumentParser(description="日記生成ツール")
    parser.add_argument("--mock", action="store_true", help="モックデータを使用する")
    parser.add_argument("--user_name", type=str, help="Xのユーザー名")
    parser.add_argument("--location_name", type=str, help="天気の取得に使う地名")
    parser.add_argument("--start_date", type=str, help="開始日 (YYYY-MM-DD)")
    parser.add_argument("--end_date", type=str, help="終了日 (YYYY-MM-DD)")
    return parser.parse_args()

2. メタデータの読み込み

ツイートや天気データを取得するためのメタデータを読み込みます。

def _load_metadata(self):
    if args.mock:
        self.user_name = "mock_user"
        self.location_name = "東京"
        self.start_date = datetime.strptime("2023-05-01", "%Y-%m-%d")
        self.end_date = datetime.strptime("2023-05-02", "%Y-%m-%d")
        self.tweets = x_api.get_user_tweets_mock()
    else:
        self.user_name = args.user_name
        self.location_name = args.location_name
        self.start_date = datetime.strptime(args.start_date, "%Y-%m-%d")
        self.end_date = datetime.strptime(args.end_date, "%Y-%m-%d")
        self.tweets = x_api.get_user_tweets(self.user_name)

3. 天気データの取得

指定された期間の天気データを取得します。

def _load_weather_data(self):
    months = {(self.start_date.year, self.start_date.month), (self.end_date.year, self.end_date.month)}
    for year, month in months:
        if args.mock:
            path = f"mock/weather/{year}{month:02d}.json"
            raw = text.load_json(path)
        else:
            raw = whether.get_past_weather(self.location_name, year, month)
        daily = whether.extract_daily_weather(raw)
        self.weather_data.update(daily)

4. 日記生成

ツイート内容を日記形式に変換します。

def tweet_to_diary(tweet_text):
    prompt_template = text.read_text_file("prompt/tweet_to_diary.txt")
    prompt = prompt_template.replace("###TWEET_TEXT###", tweet_text)
    result = gemini_api.query(prompt)
    return result

5. 画像生成

生成された日記から画像生成に必要な要素を抽出し、画像を生成します。

def extract_diary_for_image(diary_text):
    prompt_template = text.read_text_file("prompt/diary_to_situation.txt")
    prompt = prompt_template.replace("###DIARY_TEXT###", diary_text)
    result = gemini_api.query(prompt)
    return result

実行方法

  1. 実際のデータを使用して実行する場合:

    python src/main.py --user_name  --location_name  --start_date  --end_date 
    
  2. モックデータを使用して実行する場合:

    python src/main.py --mock
    

使用技術

まとめ

このツールは、ツイートと天気データを組み合わせて日記を生成し、さらに画像生成まで行うユニークなアプローチを採用しています。今後は、天気データ取得を気象庁APIに変更するなど、さらなる改善を予定しています。



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link