概要
この記事では、X(旧Twitter)のトレンドや投稿からネガティブな内容を抽出し、それをAIで解析して不満を解消するための具体的なサービスアイデアを生成するツール「不満バスターズ」の仕組みと実装について解説します。
このツールは以下の処理を行います
- Xのトレンドを取得
- トレンドの感情分析を実施
- ネガティブなトレンドに基づき、AIでサービスアイデアを生成
- 生成されたアイデアを複数の形式(140文字投稿、キャンプファイヤー形式、Qiita形式)に変換
- Xに自動投稿し、ローカルに保存
現在、このサービスはクラウドファンディングの審査中で、CAMPFIREを通じて資金調達を計画しています。
ソース
使用技術
- Python: 全体の実装
- Tweepy: X APIを利用したトレンド取得と投稿
- LLM: AI生成
処理の流れ
以下に、ツールの処理フローをコードとともに解説します。
1. トレンドの取得
まず、Xのトレンドを取得します。実際のAPIを使用する場合と、モックデータを使用する場合の2通りをサポートしています。
# filepath: src/lib/x_api.py
import tweepy
import json
def get_trends(woeid):
"""
指定された場所のトレンドを取得します。
"""
auth = tweepy.OAuthHandler(X_API_KEY, X_API_KEY_SECRET)
auth.set_access_token(X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
trends = api.get_place_trends(woeid)
return [trend["name"] for trend in trends[0]["trends"]]
def get_trends_mock(file_path, num_tweets=10):
"""
モックのトレンドポストデータを読み込みます。
"""
with open(file_path, "r", encoding="utf-8") as f:
tweets = json.load(f)
return tweets[:num_tweets]
2. 感情分析
取得したトレンドの中から、ネガティブなものを抽出します。Geminiモデルを使用して感情分析を行います。
# filepath: src/lib/gemini_api.py
from google import genai
def query(prompt):
"""
Geminiモデルを使用してプロンプトを処理します。
"""
client = genai.Client(api_key=GEMINI_KEY)
response = client.models.generate_content(
model="gemini-2.0-flash-lite",
contents=prompt,
)
return response.text.strip()
感情分析のプロンプトは以下のテンプレートを使用します:
# filepath: prompt/analyze_sentiment.txt
以下のテキストの感情を分析してください。ネガティブな感情が含まれている場合は、その感情の種類を返してください。そうでない場合は、"ポジティブ"と返してください。
テキスト: ###TEXT###
感情:
3. サービスアイデアの生成
ネガティブなトレンドに基づき、AIで不満を解消するためのサービスアイデアを生成します。
# filepath: src/main.py
for trend in negative_trends:
idea = gemini_api.query(tmp_analyze_complaint.replace("###POST_TEXT###", trend))
if not idea:
print("アイデア生成に失敗しました。")
continue
プロンプトのテンプレートは以下の通りです。
# filepath: prompt/analyze_complaint.txt
あなたは不満を解消するアイデアを提案する専門家です。
以下の不満ポストを解析し、不満を解消するための具体的なサービスのアイデアを提案してください。
不満ポスト:
###POST_TEXT###
アイデア:
4. 形式変換
生成されたアイデアを以下の形式に変換します。
- 140文字投稿
- Campfire形式
- Qiita形式
以下は、140文字投稿の生成例です。
text_x = gemini_api.query(tmp_generate_x.replace("###SERVICE_TEXT###", idea))
プロンプトのテンプレート
# filepath: prompt/generate_x.txt
以下のサービスアイデアを140文字以内で要約してください。Twitter向けに、短くても魅力的に伝わるようにしてください。
📌 サービスアイデア:
###SERVICE_TEXT###
5. 自動投稿と保存
生成されたアイデアをXに投稿し、ローカルに保存します。
# filepath: src/main.py
# ファイルを作成
targets = [("x.txt", text_x), ("campfire.md", text_campfire), ("README.md", text_qiita)]
for filename, content in targets:
with open(os.path.join(title, filename), "w", encoding="utf-8") as file:
file.write(content)
# Xに投稿
tweet_id = x_api.post_tweet(text_x)
x_api.post_tweet(text_qiita[:140], tweet_id)
実行方法
-
必要なライブラリをインストールします。
pip install -r requiments.txt
-
環境変数を設定します。
.env
ファイルを作成し、以下の内容を記載してください。X_API_KEY="YOUR_X_API_KEY" X_API_KEY_SECRET="YOUR_X_API_KEY_SECRET" X_ACCESS_TOKEN="YOUR_X_ACCESS_TOKEN" X_ACCESS_TOKEN_SECRET="YOUR_X_ACCESS_TOKEN_SECRET" X_BEARER_TOKEN="YOUR_X_BEARER_TOKEN" GEMINI_KEY="YOUR_GEMINI_API_KEY"
-
モックデータを使用して実行します。
python src/main.py --mock
まとめ
この記事では、X(旧Twitter)のトレンドから不満を解消するアイデアを生成するツール「不満バスターズ」の仕組みと実装について解説しました。このツールを活用することで、ネガティブな声をポジティブなアイデアに変換し、社会に貢献することを目指しています。