[Python] X APIの使い方完全ガイド:申請から自動投稿ボット作成まで

Python

以前はTwitter APIとして親しまれていましたが、Xになってから仕様や申請方法が大きく変わり、「APIの使い方が分からない」「コードを書いたのに403エラーが出て動かない」と悩んでいる方も多いのではないでしょうか?

そこで今回は、最新のX API(v2)の利用申請手順から、Pythonプログラムによる自動投稿の方法までを改めて分かりやすくまとめました。

さらに、初心者がつまずきやすい「権限周りのエラー対処法」や、応用編として「ランダム投稿Botの作り方」も追記しています。

この記事通りに進めれば、Pythonを使ってXの運用を自動化できるようになります!

X APIの利用

Xアカウントが存在する状態で、まずはX APIの利用申請を行います。

りお
りお

難しくないので心配しなくて大丈夫です。

X API利用申請

X Developer Platformにアクセスします。

X API v2 - X

画面右上の「Developer Portal」をクリックします。

どのプランを選択するか聞かれますので、画面下部にある「Sign up for Free Account」をクリックします。
有償のBasicまたはProを選択することで、Freeだと利用することができないツイートの検索などを行うことができます。
まずは無償のFreeでいいと思います。

ポリシー同意書へのチェックが求められますが、XのデータやAPIをどんな目的で使いたいか記載する必要があります。
詳しく書く必要はなさそう(即時承認されるので)ですが、特に考えたくない人は以下を入力してくれれば大丈夫です。

I would like to use Twitter's API to automatically display articles posted on my website on my Twitter timeline. Content will be automatically displayed on Twitter's timeline about once a day. Content from Twitter will not be retrieved using the Twitter API and displayed on anything other than Twitter.

すべてのチェックボックスにチェックして、「Submit」をクリックします。

Developer Portal画面に遷移します。

ここまででX API利用申請は完了です。
次に実際にアプリケーションでAPIを使うための設定を行っています。

  • 中学生、高校生向けのプログラミングスクール
  • アプリ甲子園やUnityインターハイ等でのコンテスト受賞者多数
  • 難関校の総合型選抜(AO入試)合格者多数
  • ピッチコンテスト受賞者、起業家も輩出

APIアプリケーション設定

画面左のProjects & Appsを展開し、Default project配下のアプリを選択します。
User authentication settingsの「Set up」をクリックします。

App permissions設定画面が表示されます。
デフォルトはReadが選択されていると思いますので、「Read and write and Direct message」にチェックします。
この設定によって、これから実行するPythonプログラムがツイートの読み書きを実行できるようになります。
Readのみの場合はツイートを読むことしかできませんので、ポストをする場合はWrite権限が必要になります。

画面を下にスクロールすると、Type of App設定画面が表示されますので、「Web App, Automated App or Bot」にチェックします。

さらに画面を下にスクロールすると、App info設定画面が表示されます。
Callback URIやWebsite URLの入力が必須になりますので、「https://x.com/」と入力しましょう。

最後に画面一番下の「Save」をクリックします。

権限変更によるアプリケーション影響が問題ないか聞かれますので、「Yes」をクリックします。

Client IDとClient Secretを提示されますが、今回のPythonプログラムでは不要なので、そのまま「Done」をクリックします。
必要な時に改めて再設定(Regenerate)できます。

Client Secretも保存するように求められますが、一旦無視して「Yes, I saved it」をクリックします。

Developer Portal画面に戻ってきますので、User authenticationが設定済みであることを確認します。

  • 外国人エンジニアから直接学べる
  • 現役エンジニア/エンジニア経験者から学ぶことで、「専門的な知識を専門家から学ぶこと」ができる
  • 質の高いプログラミング学習が可能 ・多国籍展開するソフトウェア開発会社が監修
  • 多くのプログラミング言語を学ぶことができ、学びの選択肢が広く、幅広い成長のサポートが可能

キーおよびトークンの取得

次にPythonプログラムで使用する各種キーとトークンを取得します。
「Keys and tokens」をクリックします。

まずはConsumer Keysにある「Regenerate」をクリックします。

確認画面が表示されますので、「Yes, regenerate」をクリックします。
確認画面が出てくる理由は、再設定してしまうと、今まで動いていたアプリケーションに影響を与える可能性があるためです。

API KeyとAPI Key Secretが表示されますので、「Copy」してメモ帳などに控えておきます。
一度しか表示されませんので、見逃してしまった場合は、再度Regenerateを実行すれば大丈夫です。
控え終わったら、「Yes, I saved them」をクリックします。

次にAuthentication TokenにあるBearer Tokenを「Generate」します。

先程と同様にメモ帳などにBearer Tokenを控えて、「Yes, I saved it」をクリックします。

次にAuthentication TokenにあるAccess Token and Secretを「Generate」します。

こちらも同様に、Access TokenとAccess Token Secretを「Copy」してメモ帳などに控えて、「Yes, I saved them」をクリックします。

Access Token and Secreteの生成が完了すると、読み書きの権限(ReadとWrite)が付与されていることを確認できます。

ここまでがX APIの申請からキーおよびトークンの取得になります。

りお
りお

おつかれさまでした。
アプリケーションからX APIを利用できる準備は整いましたので、
実際にプログラムを作っていきましょう!

  • サブスクリプション型プログラミングスクール
  • 入会金は0円!いつでも気軽にはじめることができる
  • 月額10,780円(税込)でHTML、PHP、Javaなどのカリキュラムが学び放題
  • 現役エンジニアの講師へチャット質問し放題で、未経験からスキルアップを考えている方におすすめ

ツイートをポストするPythonプログラム

Xにツイートを投稿するだけのシンプルなプログラムを作成していきます。

tweepyパッケージのインストール

tweepyパッケージを利用しますので、適宜インストールします。
自分の環境ではtweepyパッケージが古かったので、アップデートを実行しました。

$ pip install --user -U tweepy
Requirement already satisfied: tweepy in /home/c9320144/.local/lib/python3.6/site-packages (4.1.0)
Collecting tweepy
  Downloading tweepy-4.6.0-py2.py3-none-any.whl (69 kB)
     |################################| 69 kB 21.6 MB/s
Requirement already satisfied: requests-oauthlib<2,>=1.2.0 in /home/c9320144/.local/lib/python3.6/site-packages (from tweepy) (1.3.0)
Collecting oauthlib<4,>=3.2.0
  Downloading oauthlib-3.2.2-py3-none-any.whl (151 kB)
     |################################| 151 kB 119.9 MB/s
Collecting requests<3,>=2.27.0
  Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
     |################################| 63 kB 8.7 MB/s
Requirement already satisfied: charset-normalizer~=2.0.0 in /home/c9320144/.local/lib/python3.6/site-packages (from requests<3,>=2.27.0->tweepy) (2.0.7)
Requirement already satisfied: idna<4,>=2.5 in /home/c9320144/.local/lib/python3.6/site-packages (from requests<3,>=2.27.0->tweepy) (3.3)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/c9320144/.local/lib/python3.6/site-packages (from requests<3,>=2.27.0->tweepy) (1.26.7)
Requirement already satisfied: certifi>=2017.4.17 in /home/c9320144/.local/lib/python3.6/site-packages (from requests<3,>=2.27.0->tweepy) (2021.10.8)
Installing collected packages: requests, oauthlib, tweepy
  Attempting uninstall: requests
    Found existing installation: requests 2.26.0
    Uninstalling requests-2.26.0:
      Successfully uninstalled requests-2.26.0
  Attempting uninstall: oauthlib
    Found existing installation: oauthlib 3.1.1
    Uninstalling oauthlib-3.1.1:
      Successfully uninstalled oauthlib-3.1.1
  Attempting uninstall: tweepy
    Found existing installation: tweepy 4.1.0
    Uninstalling tweepy-4.1.0:
      Successfully uninstalled tweepy-4.1.0
Successfully installed oauthlib-3.2.2 requests-2.27.1 tweepy-4.6.0

ソースコード

こちらのプログラムでXにツイート(Hello World)をポストできます。
API_KEY,API_SECRET,BEARER_TOKEN,ACCESS_TOKEN,ACCESS_TOKEN_SECRETは、取得したキーおよびトークンを入力してください。

import tweepy

API_KEY = 'XXXXXXXXXX'
API_SECRET = 'XXXXXXXXXX'
BEARER_TOKEN = 'XXXXXXXXXX'
ACCESS_TOKEN = 'XXXXXXXXXX'
ACCESS_TOKEN_SECRET = 'XXXXXXXXXX'

client = tweepy.Client(bearer_token=BEARER_TOKEN,
                       consumer_key=API_KEY,
                       consumer_secret=API_SECRET,
                       access_token=ACCESS_TOKEN,
                       access_token_secret=ACCESS_TOKEN_SECRET)

client.create_tweet(text='Hello World')

実行結果

実行結果はこのようになります。

>>> client.create_tweet(text='Hello World')
Response(data={'id': '1846181077259616679', 'edit_history_tweet_ids': ['1846181077259616679'], 'text': 'Hello World'}, includes={}, errors=[], meta={})

Pythonプログラムを実行すると、X上に正しくポストされていることを確認できます。

このコードをスクリプト化して、cronなどでスケジュール実行できれば、自動で定期的にポストするプログラムを作成できます。

りお
りお

自宅PCで定期的に実行しようとすると常時起動しておかないといけないので、
サーバをレンタルすることをおススメます。

りおがConoHa WINGを選んでいる理由
WordPressブログを運営する上で『ConoHa WING』のサーバーをレンタルしています。
数多くのレンタルサーバーがありますが、自分の場合は以下の点で『ConoHa WING』を選びました。

  • 認知度が高いこと:これはWeb検索した結果と、ブログのレビューなどを参考にしています。ある程度品質が高く、評判がいいレンタルサーバーは安心できます。そういった意味では、ConoHa WING以外にもXServerが挙げられると思います。
  • 価格がよりリーズナブルであること:XServerと比較すると、6ヵ月プランはConoHa WINGと同価格なのですが、12ヵ月になってくるとConoHa WINGの方が若干安くなっています(2025年8月時点)。

今のところ、運用している上でも大きな不満はありませんので、『ConoHa WING』を継続利用予定です。

セキュリティへの配慮(環境変数の利用)

ソースコードに直接APIキーを書くと、うっかりSNSやGitHubにコードを公開した際にキーが流出してしまい、アカウントが悪用される危険があります。
セキュリティを高めるために、python-dotenv というライブラリを使って、キーを別のファイル(環境変数)から読み込む方法を紹介します。

1. ライブラリのインストール

pip install python-dotenv

2. .envファイルの作成

プログラムと同じフォルダに .env という名前のファイルを作成し、キーを記述します。

API_KEY=XXXXXXXXXX
API_SECRET=XXXXXXXXXX
BEARER_TOKEN=XXXXXXXXXX
ACCESS_TOKEN=XXXXXXXXXX
ACCESS_TOKEN_SECRET=XXXXXXXXXX

3. Pythonコードの修正

コードを以下のように書き換えることで、安全にキーを読み込めます。

import tweepy
import os
from dotenv import load_dotenv

# .envファイルを読み込む
load_dotenv()

# 環境変数からキーを取得
API_KEY = os.getenv('API_KEY')
API_SECRET = os.getenv('API_SECRET')
BEARER_TOKEN = os.getenv('BEARER_TOKEN')
ACCESS_TOKEN = os.getenv('ACCESS_TOKEN')
ACCESS_TOKEN_SECRET = os.getenv('ACCESS_TOKEN_SECRET')

# 以下、クライアント設定は同じ
client = tweepy.Client(
    bearer_token=BEARER_TOKEN,
    consumer_key=API_KEY,
    consumer_secret=API_SECRET,
    access_token=ACCESS_TOKEN,
    access_token_secret=ACCESS_TOKEN_SECRET
)

client.create_tweet(text='Hello World from dotenv!')

実用的な自動化(ランダム投稿ボット)

毎回「Hello World」ではつまらないので、リストの中からランダムに一つ選んで投稿するプログラムに改造してみましょう。
これを使えば、「今日の名言ボット」や「おみくじボット」が作れます。

import tweepy
import random # ランダム機能を使うためのライブラリ
import os
from dotenv import load_dotenv

# .envファイルを読み込む
load_dotenv()

# 環境変数からキーを取得
API_KEY = os.getenv('API_KEY')
API_SECRET = os.getenv('API_SECRET')
BEARER_TOKEN = os.getenv('BEARER_TOKEN')
ACCESS_TOKEN = os.getenv('ACCESS_TOKEN')
ACCESS_TOKEN_SECRET = os.getenv('ACCESS_TOKEN_SECRET')

# 以下、クライアント設定は同じ
client = tweepy.Client(
    bearer_token=BEARER_TOKEN,
    consumer_key=API_KEY,
    consumer_secret=API_SECRET,
    access_token=ACCESS_TOKEN,
    access_token_secret=ACCESS_TOKEN_SECRET
)

# 投稿したい内容のリスト
tweet_list = [
    "Pythonで自動投稿テスト中!",
    "今日の天気はどうですか?",
    "APIを使えばBot作りも簡単ですね。",
    "プログラミング学習、頑張りましょう!",
    "Infomiscの記事を読んで実践中!"
]

# リストからランダムに1つ選ぶ
text_to_tweet = random.choice(tweet_list)

# ポスト実行
try:
    client.create_tweet(text=text_to_tweet)
    print(f"投稿成功: {text_to_tweet}")
except Exception as e:
    print(f"投稿失敗: {e}")

このプログラムを定期的に実行すれば、立派なBotの完成です!

よくあるエラーと対処法(FAQ)

プログラムを実行したけれどエラーが出てしまう場合のチェックリストです。

403 Forbidden Error

403 Forbidden が出る場合、多くの原因は「アプリの権限設定」です。

  • 原因: Developer Portalでの設定が Read のままになっている可能性があります。
  • 対策: 本記事の「APIアプリケーション設定」の項目を見直し、User authentication settingsで 「Read and write」 になっているか確認してください。設定変更後は、必ず「Keys and Tokensを再生成(Regenerate)」して、プログラム内のキーを書き換える必要があります。

429 Too Many Requests

  • 原因: APIの利用制限(レートリミット)に達しています。
  • 対策: Freeプランの場合、1日あたり、または15分あたりの投稿数に厳しい制限があります(例:24時間で50ツイートなど、仕様は頻繁に変更されます)。短時間に連投していないか確認し、時間を空けて実行してください。

Freeプランと有償プランの違い(制限事項まとめ)

Xになってから仕様が色々変わっており、FreeではX APIによるツイート検索ができなくなっています。
Freeでできるのはポストのみで、Twitter時代はできていたことができなくなっていて躓きました。

まずは確認!Freeプランで「できること・できないこと」

X API v2では、無償のFreeプランと有償のBasicプラン以上で、できることに大きな差があります。
開発を始める前に、自分のやりたいことがFreeプランで実現可能か確認しておきましょう。

プラン比較表(2025年時点の目安)

機能Free(無料)Basic(月額 $200)
主な用途一方通行の自動投稿Botなどリプライ返信Bot、小規模な分析
ツイート投稿(Write)可能(月間1,500件まで)可能(月間50,000件まで)
ツイート検索(Read)不可(キーワード検索やTL取得はできません)可能(月間 10,000件まで)
ユーザー情報取得自分の情報のみ他人の情報も一部取得可

Freeプランの注意点
Freeプランは基本的に「書き込み専用(Write-only)」と考えてください。
「特定のキーワードを含むツイートを探していいねする」や「自分へのリプライを取得して返信する」といった機能を作りたい場合は、有償のBasicプランが必要になります。
まずはFreeプランで自動投稿Botを作り、さらに高度な機能が必要になったらアップグレードを検討するのがおすすめです。

おススメ記事

コメント

タイトルとURLをコピーしました