【2024年】PHPでTwitter API V2を使ってツイートしてみた!

Web開発
この記事は約7分で読めます。

こんにちは、@Manabu です。

X(旧Twitter)アカウントでポストすることが、PHPでの処理で行えるということなので、やってみました!

いくつかネットの記事を参考にさせていただいたのですが、実際に投稿できるまで3時間くらいかかったので、なぜできなかったのかも併せて紹介します。

Manabu
Manabu

今後、APIで自動投稿しようかな…

なんて考えている方は、ぜひ記事を参考に投稿できるようにして下さい!

概要

簡単に、概要を共有します。

記事の目的

この記事の目的は、PHPを使ってTwitter API V2にアクセスし、実際にツイートを投稿する方法を紹介することです。

Twitter APIは、多くのウェブアプリケーションやモバイルアプリケーションで利用されていますが、その実装にはある程度の知識が必要です。本記事では、必要な手順を順を追って解説し、簡単にTwitter APIを利用できるようサポートします。

Twitter API V2とは?

Twitter API V2は、Twitterが提供する最新のAPIバージョンであり、以前のバージョンよりも機能が強化されています。

特に、データの取得や投稿、ユーザーの管理といった機能がより柔軟に行えるようになっています。

PHP以外の実装方法

Twitter APIは、多くのプログラミング言語でサポートされています。例えば、以下のような言語や環境で実装することができます。

  • Python:tweepyライブラリでTwitter APIにアクセスし、ツイートの投稿やデータの取得を行うことが可能
  • JavaScript/Node.js:twitter-api-v2パッケージを使って、Twitter API V2を利用できる
  • Ruby:twitter gemを使って、Twitter APIにアクセスできる
  • Java:Twitter4Jを使用して、JavaアプリケーションからTwitter APIを操作できる

それぞれの言語やライブラリには独自のメリットがあり、開発環境やプロジェクトの要件に応じて選択できます。

twitteroauthとは?

twitteroauthは、PHP用のTwitter OAuthライブラリです

使用時のバージョンは7.0です。

このライブラリは、Twitter APIとのやり取りを簡単に行うために設計されており、複雑な認証手続きが必要なTwitter APIへのリクエストをシンプルに実装することができます。

今回は、このライブラリを使用してツイートを行います。(composerでインストールします。)

X 開発者ポータルでキーを取得

Xの開発者ポータルのサイトがあり、そちらにサインインすることで開発用の情報を取得することができます。

Use Cases, Tutorials, & Documentation
Publish & analyze posts, optimize ads, & create unique customer experiences with the X API, X Ads API, & X Embeds.

開発者ポータルサイトにサインイン

まず、サインインしましょう。

以下のような画面が表示されたら、それぞれ入力します。

入力したら、完了することで開発者ポータルへのサインインが完了します。

ユーザー認証情報の入力

赤枠にユーザー認証の設定を行う部分があります。

こちらの設定を行いましょう。

以下の部分は必ず、赤枠を選択してください。
この設定を行わないと、ツイートを行うことができません。

そのほか、必須項目を入力したら設定を登録しましょう。

key情報の取得

画像の青枠から「Keys and tokens」を選択し、赤枠の二つからAPIキー情報を取得しましょう。

取得する必要のある情報は、以下の4つです。

  • API KEY
  • API SECRET KEY
  • ACCESS TOKEN
  • SECRET ACCESS TOKEN

PHPでの処理で使用するので、どこかにメモするようにお願いします。

実装方法

ここからPHPの方で実装していきます。

twitteroauthライブラリのインストール

以下のコマンドで、twitteroauthライブラリをインストールします。

composer require abraham/twitteroauth

composerを使用しているので、composerがない場合はインストールするようにお願いします。

PHPのコードを記載

PHPの処理を実装します。

以下のようなコードを記載します。

require__DIR__.'/vendor/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

$connection = new TwitterOAuth(
  "API KEY",
  "API SECRET KEY",
  "ACCESS TOKEN",
  "SECRET ACCESS TOKEN"
);

$connection->setApiVersion('2');

$text = "Twitter APIテストです。";

$result = $connection->post("tweets", ["text"=>$text], ['jsonPayload'=>true]);

$httpCode = $connection->getLastHttpCode();

if ($httpCode == 201) { // 201は作成成功を示すステータスコード
  $this->info("ツイートが送信されました!");
} else {
  $errorMessage=isset($result->errors) ?json_encode($result->errors, JSON_UNESCAPED_UNICODE) :'不明なエラー';
  $this->error("ツイートの送信に失敗しました。HTTPコード: $httpCode, エラーメッセージ: $errorMessage");
}

こちらの処理を実行すると、正しくツイートが投稿されました。

上手くいかなかったところ

他のサイト様の記事を参考にさせていただこうと、コードをみたときにpostの第3引数は「true」という値でした。

そのまま参考にして実行すると、以下のようなエラーが発生してしまいました。

TypeError
  Abraham\TwitterOAuth\TwitterOAuth::post(): Argument #3 ($options) must be of type array, true given, called in /var/www/task/app/Console/Commands/TweetCommand.php on line 44
  at vendor/abraham/twitteroauth/src/TwitterOAuth.php:251
    247▕      * @param array  $options
    248▕      *
    249▕      * @return array|object
    250▕      */
  ➜ 251▕     public function post(
    252▕         string $path,
    253▕         array $parameters = [],
    254▕         array $options = [],
    255▕     ) {
  1   app/Console/Commands/TweetCommand.php:44
      Abraham\TwitterOAuth\TwitterOAuth::post()
      +13 vendor frames
  15  artisan:35
      Illuminate\Foundation\Console\Kernel::handle()

内容を見ると、第3引数には配列を入力する必要があるということのエラーのようです。

ライブラリのソースの中を見ていくと、「jsonPayload」という値がフラグとして使用されており、こちらの値を設定する必要がありました。

おそらくライブラリのバージョンの違いでしょうが、内容に気づくまでに時間がかかりました。

まとめ

Twitter API V2を使用して、ポストの投稿まで実行することができました。

cronジョブとかで、自動投稿して毎日投稿してる感じにしたいと思います笑