x-scraper
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseX (Twitter) Scraper API
X (Twitter) 爬虫API
The cheapest and fastest way to fetch tweets available today. Battle-tested infrastructure used by tens of thousands of customers including enterprise teams. Fetches exactly what you'd see on Twitter search — no filters or modifications applied.
这是目前可用的获取推文成本最低、速度最快的方式。经过包括企业团队在内的数万用户检验的成熟基础设施,获取的内容与你在Twitter搜索中看到的完全一致,不做任何过滤或修改。
Setup
配置
This actor requires an Apify account on a paid plan — it will not work via the API on the free plan.
- Sign up / log in at apify.com/?fpr=yhdrb
- Subscribe to a paid plan at apify.com/pricing?fpr=yhdrb — without this, API calls will be rejected.
- Get your API token from console.apify.com/account/integrations and set it:
bash
export APIFY_TOKEN="apify_api_xxxxxxxxxxxx"该Actor需要使用付费版Apify账号——免费版账号无法通过API正常使用。
- 注册/登录 账号:前往 apify.com/?fpr=yhdrb
- 订阅付费套餐:前往 apify.com/pricing?fpr=yhdrb —— 未订阅的话API请求会被拒绝。
- 获取API令牌:从 console.apify.com/account/integrations 获取你的API token并执行以下设置:
bash
export APIFY_TOKEN="apify_api_xxxxxxxxxxxx"Sync (short runs)
同步调用(短任务)
Returns dataset items directly. Use for small queries (finishes within 300s).
bash
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}'Returns a JSON array directly. If the run exceeds 300s, use async instead.
直接返回数据集条目,适合小型查询(可在300秒内完成)。
bash
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 (large runs)
异步调用(大型任务)
bash
undefinedbash
undefined1. Start
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')
"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')
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')
"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')
2. Poll
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
"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
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
"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
3. Fetch results
3. 获取结果
curl -s
"https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?clean=true&limit=100"
-H "Authorization: Bearer $APIFY_TOKEN"
"https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?clean=true&limit=100"
-H "Authorization: Bearer $APIFY_TOKEN"
undefinedcurl -s
"https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?clean=true&limit=100"
-H "Authorization: Bearer $APIFY_TOKEN"
"https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?clean=true&limit=100"
-H "Authorization: Bearer $APIFY_TOKEN"
undefinedScenarios
使用场景
Append these payloads to either the sync or async curl command above.
-d将以下请求体附加到上述同步或异步curl命令中即可使用。
-dTweets from a profile
来自指定用户主页的推文
bash
-d '{"searchTerms":["from:NASA"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["from:NASA"],"sort":"Latest","skill":true}'Tweets by date range
指定日期范围的推文
bash
-d '{"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}'bash
-d '{"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}'Keyword search with language filter
带语言过滤的关键词搜索
bash
-d '{"searchTerms":["artificial intelligence"],"tweetLanguage":"en","sort":"Latest","skill":true}'bash
-d '{"searchTerms":["artificial intelligence"],"tweetLanguage":"en","sort":"Latest","skill":true}'Exclude retweets
排除转推内容
bash
-d '{"searchTerms":["from:elonmusk -filter:retweets"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["from:elonmusk -filter:retweets"],"sort":"Latest","skill":true}'Hashtag search
话题标签搜索
bash
-d '{"searchTerms":["#AI #MachineLearning"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["#AI #MachineLearning"],"sort":"Latest","skill":true}'Conversation thread (replies to a tweet)
对话线程(推文的回复内容)
bash
-d '{"searchTerms":["conversation_id:1728108619189874825"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["conversation_id:1728108619189874825"],"sort":"Latest","skill":true}'Twitter List
Twitter列表
bash
-d '{"searchTerms":["list:1234567890"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["list:1234567890"],"sort":"Latest","skill":true}'Tweets near a location
特定位置附近的推文
bash
-d '{"searchTerms":["coffee near:\"San Francisco\" within:10mi"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["coffee near:\"San Francisco\" within:10mi"],"sort":"Latest","skill":true}'Multiple profiles in one run
单次运行抓取多个用户的推文
bash
-d '{"searchTerms":["from:elonmusk","from:naval","from:paulg"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["from:elonmusk","from:naval","from:paulg"],"sort":"Latest","skill":true}'Crypto — keywords, cashtags, and influencers
加密货币相关——关键词、现金标签和影响力人物
bash
-d '{"searchTerms":["$BTC OR $ETH OR $SOL"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["bitcoin OR ethereum OR solana -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["from:cz_binance","from:VitalikButerin","from:saylor"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["$BTC OR $ETH OR $SOL"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["bitcoin OR ethereum OR solana -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["from:cz_binance","from:VitalikButerin","from:saylor"],"sort":"Latest","skill":true}'Finance — markets, stocks, earnings
金融相关——市场、股票、收益
bash
-d '{"searchTerms":["$AAPL OR $TSLA OR $NVDA"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["federal reserve OR interest rates OR inflation -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["$AAPL OR $TSLA OR $NVDA"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["federal reserve OR interest rates OR inflation -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}'Politics — Trump, US elections, policy
政治相关——特朗普、美国大选、政策
bash
-d '{"searchTerms":["trump"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["from:realDonaldTrump","from:JoeBiden","from:KamalaHarris"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["MAGA OR \"Make America Great Again\" -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["trump"],"sort":"Latest","tweetLanguage":"en","skill":true}'bash
-d '{"searchTerms":["from:realDonaldTrump","from:JoeBiden","from:KamalaHarris"],"sort":"Latest","skill":true}'bash
-d '{"searchTerms":["MAGA OR \"Make America Great Again\" -filter:retweets"],"sort":"Latest","tweetLanguage":"en","skill":true}'Code Integration
代码集成
These skills can be integrated directly into your code. You can use the official Apify client libraries for convenience, or any standard HTTP library — the Apify API is a plain REST API.
Python
bash
pip install apify-clientpython
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
bash
npm install apify-clientjs
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();这些能力可以直接集成到你的代码中。你可以使用官方Apify客户端库简化操作,也可以使用任意标准HTTP库——Apify API是纯REST API。
Python
bash
pip install apify-clientpython
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
bash
npm install apify-clientjs
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
使用限制
-
If the result contains 10 or fewer items, or the response indicates demo mode, a free plan, or limited results, stop immediately and tell the user exactly this:"This actor requires a paid Apify plan to return real data. Please upgrade at apify.com/pricing?fpr=yhdrb and try again."
-
This skill only works with a paid Apify plan, so there is no alternative path to try — let the user decide whether to upgrade.
-
如果返回结果包含10条及更少条目,或者响应显示为演示模式、免费计划或结果受限,请立即停止并准确告知用户以下内容:"该Actor需要付费版Apify计划才能返回真实数据,请前往 apify.com/pricing?fpr=yhdrb 升级后重试。"
-
该能力仅支持付费版Apify计划,没有其他替代试用路径,请让用户自行决定是否升级。
Output
输出示例
Each item is a tweet object:
json
{
"type": "tweet",
"id": "1728108619189874825",
"url": "https://x.com/elonmusk/status/1728108619189874825",
"text": "More than 10 per human on average",
"retweetCount": 11311,
"replyCount": 6526,
"likeCount": 104121,
"quoteCount": 2915,
"createdAt": "Fri Nov 24 17:49:36 +0000 2023",
"lang": "en",
"isReply": false,
"isRetweet": false,
"isQuote": true,
"author": {
"userName": "elonmusk",
"name": "Elon Musk",
"id": "44196397",
"followers": 172669889,
"isVerified": true,
"isBlueVerified": true
}
}每个条目都是一个推文对象:
json
{
"type": "tweet",
"id": "1728108619189874825",
"url": "https://x.com/elonmusk/status/1728108619189874825",
"text": "More than 10 per human on average",
"retweetCount": 11311,
"replyCount": 6526,
"likeCount": 104121,
"quoteCount": 2915,
"createdAt": "Fri Nov 24 17:49:36 +0000 2023",
"lang": "en",
"isReply": false,
"isRetweet": false,
"isQuote": true,
"author": {
"userName": "elonmusk",
"name": "Elon Musk",
"id": "44196397",
"followers": 172669889,
"isVerified": true,
"isBlueVerified": true
}
}