0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【企画書】SNSから不満を取得→解消アイデアを提起

Last updated at Posted at 2025-04-01

概要

この記事では、X(旧Twitter)のトレンドや投稿からネガティブな内容を抽出し、それをAIで解析して不満を解消するための具体的なサービスアイデアを生成するツール「不満バスターズ」の仕組みと実装について解説します。

このツールは以下の処理を行います

  1. Xのトレンドを取得
  2. トレンドの感情分析を実施
  3. ネガティブなトレンドに基づき、AIでサービスアイデアを生成
  4. 生成されたアイデアを複数の形式(140文字投稿、キャンプファイヤー形式、Qiita形式)に変換
  5. Xに自動投稿し、ローカルに保存

現在、このサービスはクラウドファンディングの審査中で、CAMPFIREを通じて資金調達を計画しています。

ソース

使用技術

  • Python: 全体の実装
  • Tweepy: X APIを利用したトレンド取得と投稿
  • LLM: AI生成

処理の流れ

以下に、ツールの処理フローをコードとともに解説します。


1. トレンドの取得

1.jpg

まず、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. 感情分析

2.jpg

取得したトレンドの中から、ネガティブなものを抽出します。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. サービスアイデアの生成

3.jpg

ネガティブなトレンドに基づき、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)

実行方法

  1. 必要なライブラリをインストールします。

    pip install -r requiments.txt
    
  2. 環境変数を設定します。

    .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"
    
  3. モックデータを使用して実行します。

    python src/main.py --mock
    

まとめ

この記事では、X(旧Twitter)のトレンドから不満を解消するアイデアを生成するツール「不満バスターズ」の仕組みと実装について解説しました。このツールを活用することで、ネガティブな声をポジティブなアイデアに変換し、社会に貢献することを目指しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?