mcpField
A
analyzing-twitter-sentiment-for-topic

analyzing-twitter-sentiment-for-topic

github.com/apidojo-io数据与数据库1849 次安装24 周前更新
代码仓库

关于 analyzing-twitter-sentiment-for-topic

用于收集特定主题的推文并分析情绪、主题和时间变化的技能,提供基于 Apify 的采集与报告流程。

主要功能

  1. 01按搜索词采集推文
  2. 02逐条分类情绪
  3. 03提取正负面主题
  4. 04按互动量加权情绪
  5. 05整理情绪分析报告

适用场景

  1. 01跟踪品牌或话题反响
  2. 02比较正负面讨论主题
  3. 03查看指定时段的情绪

MCP 相关

可通过 Apify MCP 服务运行推文抓取 Actor,也提供命令行和 REST API 方案。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/apidojo-io/apidojo-skills --skill analyzing-twitter-sentiment-for-topic

安装后在 Claude Code 中输入/analyzing-twitter-sentiment-for-topic确认已加载。

详细介绍

分析某个主题的 Twitter 情绪

收集一批关于任意主题或关键词的推文,并对数据集进行情绪分析。识别占主导地位的情绪基调、推动正面/负面情绪的关键主题,以及随时间变化的发文量模式。

前提条件

  • 已设置 APIFY_TOKEN 环境变量
  • 可选:已安装 Apify MCP 服务

输入

参数类型必填默认值备注
searchTermsarray✅[]Twitter 高级搜索查询(例如 ["#AI lang:en", "from:NASA"])
sortstring可选Top排序方式:Latest、Top 或 Latest+Top
tweetLanguagestring可选—ISO 639-1 语言代码(例如 en)
maxItemsnumber可选不限返回的最大推文数
onlyVerifiedUsersboolean可选false仅包含已认证用户的推文
onlyTwitterBlueboolean可选false仅包含 Twitter Blue 订阅用户的推文
onlyImageboolean可选false仅包含带图片的推文
onlyVideoboolean可选false仅包含带视频的推文
onlyQuoteboolean可选false仅包含引用推文
authorstring可选—筛选特定用户名发布的推文
inReplyTostring可选—筛选回复特定用户名的推文
mentioningstring可选—筛选提及特定用户名的推文
geotaggedNearstring可选—筛选特定地点附近的推文
withinRadiusstring可选—geotaggedNear 周边的半径
geocodestring可选—经纬度 + 半径字符串
placeObjectIdstring可选—筛选标记了地点的推文
minimumRetweetsnumber可选—最低转推数
minimumFavoritesnumber可选—最低点赞数
minimumRepliesnumber可选—最低回复数
startstring可选—此日期之后的推文(YYYY-MM-DD)
endstring可选—此日期之前的推文(YYYY-MM-DD)
includeSearchTermsboolean可选false将匹配的搜索词添加到每条推文中
customMapFunctionstring可选—用于转换每个输出对象的 JavaScript 函数

工作流

Progress:
- [ ] Step 1: Define topic and sentiment scope
- [ ] Step 2: Collect tweets via search
- [ ] Step 3: Classify sentiment per tweet
- [ ] Step 4: Identify themes per sentiment bucket
- [ ] Step 5: Deliver sentiment report
第 1 步:明确参数

向用户询问:

  • 要分析的主题、关键词或品牌
  • 日期范围(默认:最近 7 天——Twitter 情绪数据衰减很快)
  • 语言(默认:英语)
  • 样本量(默认:500 条推文——足以获得可靠的分布结果)
  • 是否排除转推?(默认:是——减少重复的观点信号)
  • 对比主题(可选——用于并排比较情绪)
第 2 步:收集推文

建议使用 — 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

必须在环境变量或 .env 文件中设置 APIFY_TOKEN。

如果 Apify MCP 可用:

Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
  "searchTerms": ["[TOPIC_KEYWORD]"],
  "maxItems": 500,
  "tweetLanguage": "en",
  "since": "[YYYY-MM-DD]",
  "until": "[YYYY-MM-DD]"
}

REST API 备用方案:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerms": ["[TOPIC_KEYWORD]"],
    "maxItems": 500,
    "tweetLanguage": "en",
    "since": "[YYYY-MM-DD]"
  }'
第 3 步:分类情绪

根据每条推文的 text,使用词汇信号将其分类为正面、负面或中性:

正面指标: love、great、amazing、perfect、best、win、excited、congrats、excellent、recommend、beautiful、proud、happy、thank、awesome、incredible 负面指标: hate、awful、worst、terrible、broken、scam、disappointed、angry、frustrated、disgusted、avoid、never again、shame、sad、fail、wrong、bad 强烈负面语气加强词: "can't believe"、"what a joke"、"are you serious"、"wtf"、"this is ridiculous" 默认归为中性: 其他所有情况

对于含义模糊的情况,使用表情符号作为信号:

  • 😍🥰❤️🙌👏✨🔥 → 倾向于正面
  • 😡🤬😤💀🗑️🤢👎 → 倾向于负面
  • 🤔😐🤷 → 倾向于中性

根据互动量为推文加权:获得 1,000 个赞的推文比获得 0 个赞的推文更具参考价值。

步骤 4:主题提取

对于负面推文:找出反复出现频率最高的 3–5 个名词/主题。人们具体在为什么感到不满? 对于正面推文:找出反复出现频率最高的 3–5 个称赞主题。

留意反复出现的人名、地名、产品名等专有名词、具体事件或功能名称。

步骤 5:格式化报告

输出格式

# Twitter Sentiment Analysis: "[TOPIC]"
Period: [DATE_RANGE] | Tweets analyzed: [N] | Date: [DATE]

## Overall Sentiment

████████████░░░░░░░░ 正面: [X%] ([N] 条推文) ████░░░░░░░░░░░░░░░░ 负面: [X%] ([N] 条推文) ██████████░░░░░░░░░░ 中立: [X%] ([N] 条推文)


Weighted by engagement:
- Positive sentiment accounts for [X%] of total likes/RTs
- Negative sentiment accounts for [X%] of total likes/RTs

**Overall verdict:** [Mostly Positive / Mixed / Mostly Negative / Polarized]

## Top Negative Themes
1. "[Theme]" — [N] tweets, [N] total likes
   Example: "@[handle]: [tweet excerpt]"
2. "[Theme]" — [N] tweets
3. "[Theme]" — [N] tweets

## Top Positive Themes
1. "[Theme]" — [N] tweets, [N] total likes
   Example: "@[handle]: [tweet excerpt]"
2. "[Theme]" — [N] tweets

## Most Engaged Tweets
🔴 Most-liked negative: @[handle] ([N] likes): "[excerpt]"
🟢 Most-liked positive: @[handle] ([N] likes): "[excerpt]"

## Volume Over Time
[Day 1]: [N] tweets | [Day 2]: [N] tweets | [Day 3]: [N] tweets

## Notable Spikes
[Date with highest volume] — [N] tweets | Likely cause: [describe if detectable from tweet context]

故障排查

**情感分析结果不准确:**词汇分析可能无法识别讽刺。对于影响重大的决策,请手动检查每个类别中排名前 20 的推文。 **主题范围太广:**缩小搜索词的范围。“Apple”会同时搜索到科技和食品内容,不妨改用“Apple iPhone”。 **推文数量极少:**目前 Twitter 上可能鲜少有人讨论该主题。请扩大日期范围。

评论

支持 Markdown