mcpField
S
scraping-tweets-from-account

scraping-tweets-from-account

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

关于 scraping-tweets-from-account

用于收集 Twitter/X 公开账号推文时间线的数据技能,内容包括回复和媒体。它使用 Apify 的 tweet-scraper,并支持按账号、日期等条件筛选数据集。

主要功能

  1. 01收集公开账号推文
  2. 02包含回复和媒体
  3. 03按日期与互动量筛选
  4. 04导出结果数据集

适用场景

  1. 01查看账号的推文历史
  2. 02连同帖子分析回复和媒体
  3. 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