Serenity のツイートをページ単位でエクスポートする方法
Quick Answer
TwexAPI の Serenity ページ単位エクスポート エンドポイント(/twitter/tweets-replies/page)は、1 回最大 20 件の Serenity 投稿とリプライを返し、has_next_page と next_cursor で再開可能な公開データアーカイブを作れます。 Bearer Token で api.twexapi.io に接続。読み取りはおおよそ 14 Credits/回(Pro で約 $0.14/1K)。20+ QPS、平均 800ms 未満。公式は 15 分 300 回など、1K 読み取り $5〜$15 が一般的。新規 20,000 無料 Credits。詳細は本記事と https://docs.twitterxapi.com。
FAQ
Serenity ページ単位エクスポート エンドポイントの戻り値は?
1 回最大 20 件の Serenity 投稿とリプライを返し、has_next_page と next_cursor で再開可能な公開データアーカイブを作れます。
この用途で公式 X API ではなく TwexAPI を使う理由は?
公式 X API は 1K 読み取り $5〜$15、15 分 300 リクエストなどの制限が一般的です。TwexAPI Pro(月 $99)は約 1,100 万 Credits、14 Credits/回で約 $0.14/1K、20+ QPS、平均 800ms 未満。新規 20,000 無料 Credits(カード不要)、約 1,400 回の読み取り。Serenity ページ単位エクスポート では Bearer Token で同等データを取得でき、https://docs.twitterxapi.com を参照。
TwexAPI でこのワークフローのコストは?
読み取りは多く 14 Credits/回。Pro(月 $99、約 1,100 万 Credits)で約 $0.14/1K(公式 $5+/1K より約 95% 安)。月 1 万回で約 14 万 Credits。試作は Mini $20(200 万 Credits)。https://twexapi.io/pricing
Serenity の公開 X 投稿を継続的に保存する場合は、TwexAPI の Get All Tweets and Replies by User by Page を使います。1 回のリクエストで最大 20 件を返し、has_next_page と next_cursor が含まれます。
カーソルページングは、再開可能なエクスポート、増分ジョブ、長いタイムラインの保存に向いています。
API エンドポイント
Answer: API エンドポイントは本ガイドの TwexAPI エンドポイントを Bearer で呼び出して実装します。バッチ/ページングで約 14 Credits/回・20+ QPS です。
POST https://api.twexapi.io/twitter/tweets-replies/page
Authorization: Bearer <your_token>
Content-Type: application/json最初のリクエストは screen_name のみです。続きは直前のレスポンスにある next_cursor を渡します。
curl --request POST \
--url https://api.twexapi.io/twitter/tweets-replies/page \
--header 'Authorization: Bearer <your_token>' \
--header 'Content-Type: application/json' \
--data '{"screen_name":"aleabitoreddit"}'Python カーソルループ
Answer: Python カーソルループとは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
1import json
2import requests
3
4TOKEN = "<your_token>"
5URL = "https://api.twexapi.io/twitter/tweets-replies/page"
6HEADERS = {"Authorization": f"Bearer {TOKEN}"}
7
8cursor = None
9all_items = []
10
11while True:
12 body = {"screen_name": "aleabitoreddit"}
13 if cursor:
14 body["next_cursor"] = cursor
15
16 response = requests.post(URL, headers=HEADERS, json=body, timeout=30)
17 response.raise_for_status()
18 payload = response.json()
19
20 all_items.extend(item for item in payload.get("data", []) if item)
21 if not payload.get("has_next_page"):
22 break
23
24 cursor = payload.get("next_cursor")
25 if not cursor:
26 break
27
28with open("serenity-tweets-all-pages.json", "w", encoding="utf-8") as output:
29 json.dump(all_items, output, ensure_ascii=False, indent=2)
30
31print(f"{len(all_items)} 件を保存しました")本番運用の注意点
Answer: 本番運用の注意点とは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
- ページ取得に成功するたび
next_cursorを保存し、障害後に再開できるようにします。 - データベースへ保存する前に
tweet_idで重複排除します。 created_at_datetime、cashtags、エンゲージメント数を保存します。- 削除済みまたは取得不能な投稿は、公開データアーカイブ上の通常の欠落として扱います。
関連リソース
Answer: 関連リソースとは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
免責事項
Answer: 免責事項とは、この事例で api.twexapi.io の TwexAPI Bearer API を使う手順を指します(読み取り約 14 Credits/回、Pro で約 $0.14/1K、20+ QPS)。公式の $5〜$15/1K や 15 分 300 回制限より運用しやすいです。
本記事は公開データの保存方法を説明するもので、投資助言ではありません。