其他
需要抓取 X(Twitter)推文时,用 Apify X…
当需要按搜索词、账号、话题标签、关键词、会话线程、日期范围或 Twitter List 抓取推文时,用 Apify 的 X Scraper actor 通过 API 拉取数据。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 57/100 ×0.15
适用场景
需要抓取 X(Twitter)推文时,用特定
解决思路
- 在 apify.com 注册或登录 Apify 账号。
- 在 apify.com/pricing 订阅付费计划;否则 API 调用会被拒绝。
- 从 console.apify.com/account/integrations 获取 API token,并设置环境变量:export APIFY_TOKEN="apify_api_xxxxxxxxxxxx"。
- 短查询(300 秒内完成)用 Sync:curl -s -X POST "https://api.apify.com/v2/acts/nfp1fpt5gUlBwPcor/run-sync-get-dataset-items?timeout=120" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"searchTerms":["from:NASA"],"sort":"Latest","maxItems":50,"skill":true}',会直接返回 JSON 数组;若超过 300 秒则改用 async。
- 大查询用 Async 第 1 步启动:RUN=$(curl -s -X POST "https://api.apify.com/v2/acts/nfp1fpt5gUlBwPcor/runs?waitForFinish=60" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"searchTerms":["from:NASA"],"sort":"Latest","skill":true}');RUN_ID=$(echo "$RUN" | jq -r '.data.id')。
- Async 第 2 步轮询:while true; do STATUS=$(curl -s "https://api.apify.com/v2/actor-runs/$RUN_ID?waitForFinish=60" -H "Authorization: Bearer $APIFY_TOKEN" | jq -r '.data.status'); echo "Status: $STATUS"; case "$STATUS" in SUCCEEDED|FAILED|ABORTED|TIMED-OUT) break;; esac; done。
- Async 第 3 步获取结果:curl -s "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?clean=true&limit=100" -H "Authorization: Bearer $APIFY_TOKEN"。
- 场景:抓取某个 profile 的推文,向 Sync 或 Async 的 -d 追加 payload:{"searchTerms":["from:NASA"],"sort":"Latest","skill":true}。
- 场景:按日期范围抓取,追加 payload:{"searchTerms":["from:NASA since:2024-01-01 until:2024-06-01","from:NASA since:2024-06-01 until:2024-12-01"],"sort":"Latest","skill":true}。
- 场景:按关键词并带语言过滤,追加 payload:{"searchTerms":["artificial intelligence"],"tweetLanguage":"en","sort":"Latest","skill":true}。
- 场景:排除转推,追加 payload:{"searchTerms":["from:elonmusk -filter:retweets"],"sort":"Latest","skill":true}。
- 场景:按 Hashtag 搜索,追加 payload:{"searchTerms":["#AI #MachineLearning"],"sort":"Latest","skill":true}。
- 场景:抓取会话线程(某条推文的回复),追加 payload:{"searchTerms":["conversation_id:1728108619189874825"],"sort":"Latest","skill":true}。
- 场景:抓取 Twitter List,追加 payload:{"searchTerms":["list:1234567890"],"sort":"Latest","skill":true}。
- 场景:抓取某地点附近的推文,追加 payload:{"searchTerms":["coffee near:\"San Francisco\" within:10mi"],"sort":"Latest","skill":true}。
- 场景:一次运行抓取多个 profile,追加 payload:{"searchTerms":["from:elonmusk","from:naval","from:paulg"],"sort":"Latest","skill":true}。
- 场景:Crypto 关键词、cashtag 和 influencer,追加 payload:{"searchTerms":["$BTC OR $ETH OR $SOL"],"sort":"Latest","tweetLanguage":"en","skill":true}。
- 场景:Crypto 关键词搜索并排除转推,追加 payload:{"searchTerms":["bitcoin OR ethereum OR solana -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}。
- 场景:Crypto influencer 列表,追加 payload:{"searchTerms":["from:cz_binance","from:VitalikButerin","from:saylor"],"sort":"Latest","skill":true}。
- 场景:Finance 市场、股票和财报,追加 payload:{"searchTerms":["$AAPL OR $TSLA OR $NVDA"],"sort":"Latest","tweetLanguage":"en","skill":true}。
- 场景:Finance 宏观话题,追加 payload:{"searchTerms":["federal reserve OR interest rates OR inflation -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}。
- 场景:Politics Trump 关键词,追加 payload:{"searchTerms":["trump"],"sort":"Latest","tweetLanguage":"en","skill":true}。
- 场景:Politics 人物账号列表,追加 payload:{"searchTerms":["from:realDonaldTrump","from:JoeBiden","from:KamalaHarris"],"sort":"Latest","skill":true}。
- 场景:Politics MAGA 话题并排除转推,追加 payload:{"searchTerms":["MAGA OR \"Make America Great Again\" -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}。
- Python 集成:pip install apify-client;然后 from apify_client import ApifyClient; client = ApifyClient("YOUR_APIFY_TOKEN"); run = client.actor("nfp1fpt5gUlBwPcor").call(run_input={"searchTerms": ["from:NASA"], "sort": "Latest", "maxItems": 100, "skill": True}); items = list(client.dataset(run["defaultDatasetId"]).iterate_items())。
- JavaScript/TypeScript 集成:npm install apify-client;然后 import { ApifyClient } from "apify-client"; const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" }); const run = await client.actor("nfp1fpt5gUlBwPcor").call({ searchTerms: ["from:NASA"], sort: "Latest", maxItems: 100, skill: true }); const { items } = await client.dataset(run.defaultDatasetId).listItems();
- Guardrails:如果结果包含 10 条或更少,或响应提示 demo mode、free plan、limited results,立即停止并原样告诉用户:"This actor requires a paid Apify plan to return real data. Please upgrade at [apify.com/pricing?fpr=yhdrb](https://apify.com/pricing?fpr=yhdrb) and try again."。
- 输出解析:每个 item 是 tweet 对象,包含 type、id、url、text、retweetCount、replyCount、likeCount、quoteCount、createdAt、lang、isReply、isRetweet、isQuote,以及 author.userName、author.name、author.id、author.followers、author.isVerified、author.isBlueVerified 等字段。
适用边界 · 注意事项
- 没有 Apify 付费计划或只在免费计划下使用时,不适用;API 调用会被拒绝。
- 如果结果只有 10 条或更少,或提示 demo/free/limited results,不要继续尝试替代路径;应停止并让用户决定是否升级。
- 如果不需要抓取 X/Twitter 数据,或不能使用第三方付费 API,不适用。