この記事は Python で X(旧 Twitter)API に自動投稿を組み込もうとしている開発者向けです。2026年5月時点の X API は無料プランが廃止されており、認証まわりの罠が2つある。実際にハマった体験をもとに、tweepy v1.1 と v2 の使い分けまで手順を全部書く。
この記事でできること
- Python + tweepy で X に自動投稿(テキスト+画像)できる
- 2026年の X API 料金体系(無料プラン廃止・従量課金)がわかる
- 401・402 エラーで詰まったときの対処法がわかる
- 月のコストをざっくり試算できる
使ったもの
- tweepy(Python X API ラッパー)
- Python 3.11+
- X Developer Portal アカウント(要クレジットカード登録)
X API の現状(2026年5月)
結論から言うと、無料プランは存在しない。
以前は Free tier があり「個人ブログのボット程度なら無料でいける」という記事が多かった。が、現在 X Developer Portal を開くと Basic プランへの登録しか選べず、従量課金が走る。
料金体系
- URL 付きツイート 1 件 = 0.20 USD(URL なしは別体系・安い)
- 月次 Spend Cap はデフォルトで無制限。設定しないと青天井でチャージされ続けるので危険
- 上限に達すると次のサイクル開始まで API がブロックされる
Spend Cap を手動で設定しておくことを強く推奨する。設定しないと使いすぎても自動では止まらない。
実際に Spend Cap を設定後、テスト投稿 4 件目で上限に達し以下のエラーが出た:
Your enrolled account has reached its billing cycle spend cap.
API requests will be blocked until the next cycle begins on 2026-06-10.
Spend Cap は Developer Console → Billing → Spend limit から設定・変更できる。上限に達しても即時引き上げ可能。
ハマりポイント 1:401 の罠(初期設定後のトークン再作成)
アプリを最初から「Read and Write」で作成したにもかかわらず、API 呼び出しで 401 が返ってきた。Developer Portal 上はトークンが有効に見えるのに、実際のリクエストが弾かれる。
原因は特定できなかったが、初期設定直後は Access Token & Secret を一度 Regenerate(再作成)すると解消する。
対処
- Developer Portal → App → Keys and tokens
- 「Access Token & Secret」の「Regenerate」をクリック
- 新しいトークンをコードに反映
初期セットアップ後に 401 が出たら、まずトークンを再作成してみるのが最短の解決策。X のドキュメントにはこの手順が目立つ形で書かれていないため、詰まりやすい。
ハマりポイント 2:402 の罠(クレジット未入金)
トークン再発行後に再度 API を叩いたら、今度は 402 が返ってきた:
Your enrolled account does not have any credits to fulfill this request.
無料プランがないので、クレジット残高ゼロだとリクエストが弾かれる。Developer Console でクレジットカードを登録して最小額チャージすれば解消する。
実装:tweepy v1.1 と v2 の使い分け
現時点の tweepy で画像付きツイートを投稿するには、2 つの API バージョンを同時に使う必要がある。
- ツイート投稿:tweepy v2 Client(OAuth 2.0)
- 画像アップロード:tweepy v1.1 API(v2 には media upload が存在しない)
import tweepy
# ---- 画像アップロード(v1.1)----
auth = tweepy.OAuth1UserHandler(
"{API_KEY}", "{API_SECRET}",
"{ACCESS_TOKEN}", "{ACCESS_TOKEN_SECRET}"
)
api = tweepy.API(auth)
media = api.media_upload(filename="/path/to/image.png")
media_id = str(media.media_id)
# ---- ツイート投稿(v2)----
client = tweepy.Client(
consumer_key="{API_KEY}",
consumer_secret="{API_SECRET}",
access_token="{ACCESS_TOKEN}",
access_token_secret="{ACCESS_TOKEN_SECRET}"
)
response = client.create_tweet(
text="記事タイトル\nhttps://example.com/your-post",
media_ids=[media_id]
)
print(response.data["id"])
v2 だけで完結させようとすると media_upload が見つからずエラーになる。v1.1 で画像をアップして media_id を取り、それを v2 の create_tweet に渡すのが現時点での正解だ。
コスト試算
URL 付きツイート 0.20 USD/件として:
- 週 3 投稿 × 4 週 = 月 12 件 → 2.40 USD/月
- 週 3 投稿 × 5 週 = 月 15 件 → 3.00 USD/月
月 3 USD は「安い」とは言い切れない。X への自動投稿は新しいコンテンツを生み出すわけでも、投稿以外の機能を使えるわけでもない。あくまで「既存のブログ記事を X 上でリーチを広げるための配信コスト」だ。
この費用が見合うのは、X 経由の流入がアフィリエイト収益や広告収益に繋がるケースに限られる。個人ブログで収益化していない場合、月 3 USD を垂れ流し続けるだけになる可能性がある。「X に自動投稿したい」という動機だけで導入する前に、自分のブログに収益経路があるかどうかを確認しておくのが現実的だ。
毎日投稿するような用途だと月 20〜30 USD になるので特に注意。
関連アイテム
- Raspberry Pi 5 4GB(Amazonで確認)— 自動投稿を 24 時間稼働させたいなら低消費電力の常時稼働マシンとして
よくある質問
Q. 無料で X API を使う方法はありますか?
A. 2026年5月時点では Free tier が存在しないため、クレジットカード登録と課金が必須です。従量課金なので月の投稿数を絞れば数ドル以内に収まります。
Q. 401 エラーが消えません
A. 初期設定後に 401 が出ることがあります。Developer Portal → App → Keys and tokens で Access Token & Secret を「Regenerate」してください。権限変更の有無に関わらず、再発行すると解消します。
Q. 画像なしのテキストツイートも 0.20 USD かかりますか?
A. 画像の有無は料金に影響しません。料金が変わるのは URL の有無です。URL なしのツイートは URL 付き(0.20 USD/件)より安い課金体系になっています。
Q. tweepy 以外のライブラリを使えますか?
A. requests で直接 OAuth を組んでも動きますが、tweepy を使うと認証まわりのボイラープレートを省けます。現時点では tweepy が最もメンテされているため推奨します。
※本記事の手順・コードは執筆時点(2026 年 5月)で動作確認していますが、X API の料金体系・tweepy の仕様は変更される可能性があります。動かない場合は コメント欄でお知らせください。
まとめ
2026年の X API は実質有料。「無料でボットを動かす」のは過去の話になった。ただし月数件の投稿なら数ドルで収まる。認証でハマる罠は 2 つあって、どちらもドキュメントで見つけにくい。tweepy で画像付き投稿するには v1.1 と v2 を組み合わせる必要があるのも現状の制約だ。
この記事が役に立ったら X(Twitter)でシェアしてもらえると喜びます。
このブログを書いた人のアプリ
本ブログの著者が作った iOS 読書管理アプリ わたしのほんやさん を App Store で公開しています。本棚をシンプルに管理したい方はぜひ。
関連記事
- Claude Code 同士が相談しながら開発したら10人チームが3日で自然発生した話【Hub-Worker 構成公開・2026年版】
- tmux + Tailscale + Termius でスマホから Claude Code を動かす最短手順【母艦ハブ型・2026年版】
参考
※この記事は Claude Code を使った自動更新を試しています。
0 件のコメント:
コメントを投稿