关于 scraping-tweets-from-account
用于收集 Twitter/X 公开账号推文时间线的数据技能,内容包括回复和媒体。它使用 Apify 的 tweet-scraper,并支持按账号、日期等条件筛选数据集。
主要功能
- 01收集公开账号推文
- 02包含回复和媒体
- 03按日期与互动量筛选
- 04导出结果数据集
适用场景
- 01查看账号的推文历史
- 02连同帖子分析回复和媒体
- 03收集指定日期范围内的推文
MCP 相关
可在 Apify MCP 服务可用时,通过它运行 Apify tweet-scraper。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ apidojo-io/ apidojo-skills --skill scraping-tweets-from-account安装后在 Claude Code 中输入/scraping-tweets-from-account确认已加载。
详细介绍
抓取账号的推文
导出任意公开 Twitter/X 账号的完整推文历史记录。返回包含回复和媒体内容的原始时间线数据集。
前提条件
- 已设置
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: Confirm account is public
- [ ] Step 2: Run tweet-scraper
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Fetch and deliver dataset
第 1 步:验证输入
如果用户名带有 @,请将其去除。不要尝试抓取私密账号——Actor 将返回 0 条结果。
第 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
必须在环境变量或
.env文件中设置APIFY_TOKEN。
如果 Apify MCP 可用:
Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
"twitterHandles": ["<handle>"],
"maxItems": 200,
"sort": "Latest"
}
REST API 备用方案:
curl -X POST \
"https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"twitterHandles": ["<handle>"], "maxItems": 200, "sort": "Latest"}'
将 id 保存为 RUN_ID。轮询直到 status = SUCCEEDED:
curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'
获取结果:
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"
第 3 步:处理边缘情况
- 0 条结果:账号可能是私密账号、已停用,或账号名拼写错误。请告知用户。
- 结果少于预期:账号公开推文数量可能少于请求数量。返回现有结果。
- 受保护的账号:Actor 将返回空结果——请告知用户该账号是私密账号。
输出格式
# Tweet Timeline: @<username>
Tweets collected: N | Includes replies: YES/NO | Includes retweets: YES/NO
| Tweet ID | Text (truncated) | Likes | Retweets | Replies | Media | Timestamp |
|----------|-----------------|-------|----------|---------|-------|-----------|
| ... | ... | ... | ... | ... | ... | ... |
Full dataset: N rows × 12 fields
Available fields: id, text, likeCount, retweetCount, replyCount, quoteCount,
isReply, isRetweet, media, tweetUrl, lang, createdAt
故障排除
**已知的公开账号返回 0 条结果:**请重试——Twitter 可能会间歇性地限制请求频率。
**缺少较早的推文:**Twitter API 限制了历史记录访问;可能无法获取非常早的推文。
**超时:**将 maxItems 减少到每次运行最多 500 条。
评论
支持 Markdown