用途
该技能用于追踪 Twitter 上体育队伍粉丝的情绪倾向,基于 apidojo 的 Tweet scraper(apidojo~tweet-scraper)执行抓取与分析。它属于 apidojo 情报技能库(apidojo intelligence skills library)。
前提条件
- 设置 APIFY_TOKEN 环境变量
- 可选:安装 Apify MCP 服务器
主要能力
通过 Twitter 高级搜索查询抓取推文,并对结果进行情绪分类与评分。支持多种输入参数与过滤条件,包括搜索词、排序、语言、数量上限、用户认证状态、媒体类型、作者、回复/提及对象、地理位置、互动量下限、时间范围等。
输入参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
| searchTerms | array | ✅ | [] | Twitter 高级搜索查询(如 ["#AI lang:en", "from:NASA"]) |
| sort | string | 可选 | Top | 排序:Latest、Top 或 Latest+Top |
| tweetLanguage | string | 可选 | — | ISO 639-1 语言代码(如 en) |
| maxItems | number | 可选 | 无限制 | 返回推文的最大数量 |
| onlyVerifiedUsers | boolean | 可选 | false | 仅认证用户的推文 |
| onlyTwitterBlue | boolean | 可选 | false | 仅 Twitter Blue 订阅者 |
| onlyImage | boolean | 可选 | false | 仅含图片的推文 |
| onlyVideo | boolean | 可选 | false | 仅含视频的推文 |
| onlyQuote | boolean | 可选 | false | 仅引用推文 |
| author | string | 可选 | — | 筛选特定作者账号 |
| inReplyTo | string | 可选 | — | 回复特定账号的推文 |
| mentioning | string | 可选 | — | 提及特定账号的推文 |
| geotaggedNear | string | 可选 | — | 某地点附近的推文 |
| withinRadius | string | 可选 | — | geotaggedNear 的半径 |
| geocode | string | 可选 | — | 纬度/经度 + 半径字符串 |
| placeObjectId | string | 可选 | — | 带地点标签的推文 |
| minimumRetweets | number | 可选 | — | 最低转推数 |
| minimumFavorites | number | 可选 | — | 最低点赞数 |
| minimumReplies | number | 可选 | — | 最低回复数 |
| start | string | 可选 | — | 此日期之后的推文(YYYY-MM-DD) |
| end | string | 可选 | — | 此日期之前的推文(YYYY-MM-DD) |
| includeSearchTerms | boolean | 可选 | false | 在每条推文中加入匹配的搜索词 |
| customMapFunction | string | 可选 | — | 转换每个输出对象的 JavaScript 函数 |
工作流程
分五步:
- 定义参数
- 运行 tweet-scraper
- 过滤并分类结果
- 按质量与相关性评分
- 交付输出
步骤 2:运行 Actor
推荐使用 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 文件中设置。
若 Apify MCP 可用:
Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
"searchTerms": ["[TEAM_NAME]", "#[TeamHashtag]", "[TEAM_NAME] game"],
"maxItems": 100
}
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": ["[TEAM_NAME]", "#[TeamHashtag]", "[TEAM_NAME] game"], "maxItems": 100}'
# 等待 SUCCEEDED。获取数据集:
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN"
步骤 3:分类结果
- WIN_BOOST(赛后获胜;情绪上升 > +40%)
- LOSS_DROP(赛后失利;情绪下降 < -30%)
- CONTROVERSY(两极分化;正面与负面均 > 30%)
- BASELINE(正常日)
步骤 4:评分
score = fan_sentiment_score = (positive_count - negative_count) / total_count # range -1 to +1
步骤 5:边界情况
体育情绪受赛事结果强烈驱动——在任何情绪测量中,应始终将球队近期比赛结果作为背景注明。
其他回退策略:
- 结果 < 20 条:放宽搜索词;移除次要过滤器
- 无结果:确认搜索词正确;尝试其他表述
- 数据质量问题:移除缺少关键字段的条目;在输出中注明数量
输出格式
# Tracking Sports Team Fan Sentiment Twitter
Results: [N] | Date: [DATE]
| # | [Key Field] | [Metric 1] | [Metric 2] | [Classification] | [Score] |
|---|------------|-----------|-----------|-----------------|---------|
| 1 | [value] | [value] | [value] | [type] | [0.XX] |
## Summary
Top result: [description]
Key finding: [insight]
故障排查
- 结果过少:放宽主要搜索词;移除限制性过滤器
- 结果质量低:应用最低分数阈值(≥ 0.50)过滤噪声
- Actor 运行失败:验证 API 密钥;在 apify.com/apidojo 检查 actor 状态