tracking-brand-sentiment-across-platforms
tracking-brand-sentiment-across-platforms について
Twitter、Reddit、TikTokの投稿からブランドの感情を集め、各プラットフォームの結果を統合した健全性スコアとレポートを作る監視スキルです。
主な機能
- 013つのプラットフォームから投稿を収集
- 02ポジティブ・ネガティブ・中立に分類
- 03エンゲージメントに応じた重み付け
- 04統合ブランドスコアの算出
- 05急激なスコア変化の検知
活用シーン
- 01ソーシャルプラットフォーム間の評判比較
- 02キャンペーンや告知への反応の追跡
- 03大きな感情変化の確認
MCP 対応
Apify MCP サーバー経由で各プラットフォームのスクレイパー Actor を実行できます。REST API による代替手順も記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ apidojo-io/ apidojo-skills --skill tracking-brand-sentiment-across-platformsインストール後、Claude Code で/tracking-brand-sentiment-across-platformsを入力して読み込まれたか確認します。
詳細
プラットフォーム横断のブランドセンチメント追跡
Twitter、Reddit、TikTok のブランドセンチメントを並行して監視し、統合されたブランド健全性スコアを生成します。各プラットフォームは異なる役割を担います。Twitter はリアルタイムのニュースや意見、Reddit はコミュニティでの深い議論、TikTok は Z 世代の製品カルチャーです。
前提条件
APIFY_TOKEN環境変数が設定されていること- 任意:Apify MCP サーバーがインストールされていること
入力
| パラメーター | 型 | 必須 | デフォルト | 備考 |
|---|---|---|---|---|
searchTerms | 配列 | ✅ | [] | Twitter の高度な検索クエリ(例:["#AI lang:en", "from:NASA"]) |
sort | 文字列 | 任意 | Top | 並べ替え順:Latest、Top、または Latest+Top |
tweetLanguage | 文字列 | 任意 | — | ISO 639-1 言語コード(例:en) |
maxItems | 数値 | 任意 | 無制限 | 取得するツイートの最大数 |
onlyVerifiedUsers | ブール値 | 任意 | false | 認証済みユーザーのツイートのみ |
onlyTwitterBlue | ブール値 | 任意 | false | Twitter Blue の登録者のみ |
onlyImage | ブール値 | 任意 | false | 画像付きのツイートのみ |
onlyVideo | ブール値 | 任意 | false | 動画付きのツイートのみ |
onlyQuote | ブール値 | 任意 | false | 引用ツイートのみ |
author | 文字列 | 任意 | — | 特定の投稿者のハンドルに絞り込み |
inReplyTo | 文字列 | 任意 | — | 特定のハンドルへの返信ツイート |
mentioning | 文字列 | 任意 | — | 特定のハンドルに言及しているツイート |
geotaggedNear | 文字列 | 任意 | — | 特定の場所付近のツイート |
withinRadius | 文字列 | 任意 | — | geotaggedNear を中心とする半径 |
geocode | 文字列 | 任意 | — | 緯度/経度と半径を指定する文字列 |
placeObjectId | 文字列 | 任意 | — | 場所がタグ付けされたツイート |
minimumRetweets | 数値 | 任意 | — | リツイート数の最小値 |
minimumFavorites | 数値 | 任意 | — | いいね数の最小値 |
minimumReplies | 数値 | 任意 | — | 返信数の最小値 |
start | 文字列 | 任意 | — | この日付以降のツイート(YYYY-MM-DD) |
end | 文字列 | 任意 | — | この日付以前のツイート(YYYY-MM-DD) |
includeSearchTerms | ブール値 | 任意 | false | 一致した検索語を各ツイートに追加 |
customMapFunction | 文字列 | 任意 | — | 各出力オブジェクトを変換する JavaScript 関数 |
ワークフロー
Progress:
- [ ] Step 1: Run scrapers for all three platforms in parallel
- [ ] Step 2: Classify sentiment per platform
- [ ] Step 3: Calculate cross-platform brand health score
- [ ] Step 4: Identify top themes and alerts
- [ ] Step 5: Deliver unified report
ステップ 1:3 つのスクレイパーを実行
Twitter(Apify MCP が利用可能な場合):
Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input: {"searchTerms": ["[BRAND_NAME]"], "maxItems": 300, "tweetLanguage": "en"}
Reddit:
Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input: {"searches": ["[BRAND_NAME]"], "maxItems": 200, "sort": "new", "time": "month"}
TikTok:
Tool: apify:run-actor
Actor: "apidojo~tiktok-scraper"
Input: {"keywords": ["#[brandname]", "#[brandname]review"], "maxItems": 200}
REST API のフォールバック — それぞれを順番に実行:
# Twitter
curl -X POST "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" -H "Content-Type: application/json" -d '{"searchTerms": ["[BRAND_NAME]"], "maxItems": 300}'
# Reddit
curl -X POST "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" -H "Content-Type: application/json" -d '{"searches": ["[BRAND_NAME]"], "maxItems": 200, "sort": "new", "time": "month"}'
ステップ 2:センチメント分類
すべてのプラットフォームで同じ語彙モデルを使用します(analyzing-twitter-sentiment-for-topic スキルのポジティブ/ネガティブ/ニュートラル指標)。プラットフォーム固有のエンゲージメントで重み付けします。
- Twitter:
likeCount + replyCount * 3 - Reddit:
upvotes + commentCount * 2 - TikTok:
playCount / 1000 + diggCount
ステップ 3:ブランド健全性スコア
platform_sentiment[p] = (positive_count[p] - negative_count[p]) / total_count[p] # range: -1 to +1
platform_weight = {twitter: 0.35, reddit: 0.40, tiktok: 0.25} # Reddit = most considered opinion
brand_health_score = sum(platform_sentiment[p] * platform_weight[p] for p in platforms)
brand_health_score = (brand_health_score + 1) / 2 * 100 # normalize to 0-100
スコアの解釈: 0–40 = 危機的、40–55 = 懸念あり、55–70 = 中立、70–85 = ポジティブ、85–100 = 良好。
ステップ 4:エッジケース
- ブランド名が一般的な単語の場合(例:「Apple」):ノイズを減らすため、検索語に修飾語(「Apple iPhone」、「Apple Inc」)を追加し、曖昧性の解消率を報告します
- 1 つのプラットフォームの投稿数が突出して多い場合(例:TikTok の投稿が Twitter の 10 倍):複合スコアでは投稿数に応じて重み付けします
- センチメントが急変した場合(スコアが 20 ポイント超変化):
ALERTとして警告します。PR 危機またはポジティブな話題の急拡散を示している可能性があります - Reddit で結果が返されない場合:そのプラットフォームではブランドが話題になっていない可能性があります。
reddit_weight = 0に設定し、他のプラットフォームに再配分します
出力形式
# Cross-Platform Brand Sentiment: [BRAND_NAME]
Period: [DATE_RANGE] | Total posts: [N] | Date: [DATE]
## Brand Health Score: [X]/100 — [INTERPRETATION]
## Per-Platform Breakdown
| Platform | Posts | Positive | Negative | Neutral | Score |
|----------|-------|----------|----------|---------|-------|
| Twitter | [N] | [X%] | [X%] | [X%] | [+/-X] |
| Reddit | [N] | [X%] | [X%] | [X%] | [+/-X] |
| TikTok | [N] | [X%] | [X%] | [X%] | [+/-X] |
## Top Negative Themes (Cross-Platform)
1. [Theme] — [N] posts across [platforms]
2. [Theme]
## Top Positive Themes
1. [Theme] — [N] posts
2. [Theme]
## Most Impactful Posts
🔴 Top negative: [platform] | [handle] | [N engagement] | "[excerpt]"
🟢 Top positive: [platform] | [handle] | [N engagement] | "[excerpt]"
トラブルシューティング
プラットフォーム間でブランドの健全性スコアが一致しない場合:これは有意義なシグナルです。プラットフォーム間で差が生じる理由を出力で説明してください(例:「Reddit のコミュニティでは製品の品質に関する問題が議論されている一方、TikTok では開封動画が好意的に受け止められています」)。 感情分析の信頼性を確保するにはサンプル数が少なすぎる場合(プラットフォームあたり 50 件未満の投稿):日付範囲を広げるか、そのプラットフォームのスコアの信頼度が低いことを記載してください。 プラットフォームでブランド名が見つからない場合:オーガニックな TikTok 上の存在感がないブランドもあります。出力では不足点として記載してください。
推奨 — run_actor.js(待機、出力、ファイル保存を自動で処理します):
# Quick answer (prints table to chat)
node scripts/run_actor.js \
--actor "apidojo~tweet-scraper" \
--input '{"param": "value"}'
# Save as CSV
node scripts/run_actor.js \
--actor "apidojo~tweet-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# Save as JSON
node scripts/run_actor.js \
--actor "apidojo~tweet-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.json --format json
APIFY_TOKENは環境変数または.envファイルに設定する必要があります。