PHPでTwitter(現・X)に投稿(ツイート)する

(1/1)
Twitter - PHP
PHPで Twitter(現・X) にメッセージを投稿(ツイート)するプログラムを作る。

Twitter社がイーロン・マスク氏に買収され、API有料化などの情報が流れたが、2023年(令和5年)6月現在、24時間に50ツイートまで、アプリケーションは1つまでなどの条件付きで、freeプラン(無料)が利用できる。Twitter API v2 のみ利用できるが、v2へ移行していない機能については Twitter API v1.1 を併用していく形になっている。
(2024年6月21日)TwitterOAuth 7.0.0 対応
(2024年5月18日)ドメイン変更 twitter.com → x.com に対応
(2023年7月16日)配布ファイルから "pahooInputData.php" が漏れていたため追加
(2023年6月17日)Twitter API v2対応

サンプル・プログラムの実行例

PHPでTwitterに投稿(ツイート)する

サンプル・プログラム

圧縮ファイルの内容
putTwitter.phpサンプル・プログラム本体
pahooTwitterAPI.phpTwitter APIに関わるクラス pahooTwitterAPI。
使い方は「PHPでTwitterに投稿(ツイート)する」などを参照。include_path が通ったディレクトリに配置すること。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
putTwitter.php 更新履歴
バージョン 更新日 内容
5.1.0 2024/05/18 twitter.com → x.com 変更対応
5.0.0 2023/07/02 Twitter API v2対応
4.1 2022/01/04 PHP8対応,リファラ・チェック改良
4.0 2016/02/11 pahooTwitterAPIクラスを分離
3.1 2014/01/19 https対応
pahooTwitterAPI.php 更新履歴
バージョン 更新日 内容
5.5.0 2024/06/21 TwitterOAuth 7.0.0 対応
5.4.0 2024/05/18 twitter.com → x.com 変更対応
5.3.0 2023/08/15 tweet3() -- メディアのシャフル機能
5.2.1 2023/07/22 bug-fix
5.2.0 2023/07/17 oembed() v2対応
pahooInputData.php 更新履歴
バージョン 更新日 内容
1.8.0 2024/11/12 validRegexPattern() 追加
1.7.0 2024/10/09 validURL() validEmail() 追加
1.6.0 2024/10/07 isButton() -- buttonタグに対応
1.5.0 2024/01/28 exitIfExceedVersion() 追加
1.4.2 2024/01/28 exitIfLessVersion() メッセージ修正
OAuth認証 および Twitter API へのアクセスには、TwitterOAuth を利用する。導入方法は公式サイトにあるように composer を使うことを推奨している。
TwitterOAuth 7.0.0PHP 8.4(2024年11月21日リリース)でいくつかのエラーが発生します。これは、引数に暗黙の null を指定することが非推奨になったためで、プログラムの改修が行われるまでは PHP 8.3 で利用することをおすすめします。

準備:pahooTwitterAPI クラス

pahooTwitterAPI.php

  11: //TwitterOAuth クラスをロードする.
  12: $version = explode('.', phpversion());
  13: if ($version[0>8) {
  14:     require __DIR__ . '/vendor/autoload.php';
  15: }
  16: use Abraham\TwitterOAuth\TwitterOAuth;
  17: 

前述の TwitterOAuth クラスをロードする。composer でインストールされたフォルダ "\vendor" を "pahooTwitterAPI.php" と同じフォルダへコピーすること。

pahooTwitterAPI.php

  34: /**
  35:  * コンストラクタ
  36:  * @param   なし
  37:  * @return  なし
  38: */
  39: function __construct() {
  40:     $this->responses = array();
  41:     $this->webapi    = '';
  42:     $this->error     = FALSE;
  43:     $this->errmsg    = '';
  44:     $this->errcode   = 0;
  45: 
  46:     $this->connection = new TwitterOAuth($this->TWTR_CONSUMER_KEY, $this->TWTR_CONSUMER_SECRET, $this->TWTR_ACCESS_KEY, $this->TWTR_ACCESS_SECRET);
  47:     //v2使用を宣言
  48:     $this->connection->setApiVersion('2');
  49: }

TwitterOAuth クラスは pahooTwitterAPI のコンストラクタでインスタンス化しておく。

pahooTwitterAPI.php

  27:     //OAuth用パラメータ
  28:     // https://apps.twitter.com/
  29:     var $TWTR_CONSUMER_KEY    = '***************';  //Cunsumer key
  30:     var $TWTR_CONSUMER_SECRET = '***************';  //Consumer secret
  31:     var $TWTR_ACCESS_KEY      = '***************';  //Access Token (oauth_token)
  32:     var $TWTR_ACCESS_SECRET   = '***************';  //Access Token Secret (oauth_token_secret)
  33: 

TwitterAPI を利用するために、クラスファイル "pahooTwitterAPI.php" を使用する。組み込み関数  require_once  を使って読めるディレクトリに配置する。ディレクトリは、設定ファイル php.ini に記述されているオプション設定 include_path に設定しておく。

事前にプログラムを登録しておく必要があり、その方法は「Twitter API - WebAPIの登録方法」を参照されたい。入手したパラメータを、上述の変数に代入しておくこと。

PHP の https対応

Twitter APIの呼び出しはhttps通信で行うため、PHPにOpenSSLモジュールが組み込まれている必要がある。
関数  phpinfo  を使って、下図のように表示されればOK。
OpenSSL - PHP
そうでない場合は、次の手順に従ってOpenSSLを有効化し、PHPを再起動させる必要がある。

Windowsでは、phop.iniの下記の行を有効化する。
extension=php_openssl.dll


Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。

Twitter API:POST /2/tweets

ツイートするには、「Twitter API:POST /2/tweets」を用いる。
WebAPIのURL
URL
https://api.twitter.com/2/tweets

入力パラメータ
フィールド名 要否 内  容
text 必須 投稿文。UTF-8でエンコードされたテキストで、140文字以下。
応答データ(json) id 投稿ID text 投稿文

解説:ツイート

pahooTwitterAPI.php

 469: /**
 470:  * メッセージをツイートする.
 471:  * Tweetet API v2 を使用する.
 472:  * @param   string $message 投稿メッセージ(UTF-8限定)
 473:  * @return  bool TRUE:ツイート成功/FALSE:失敗
 474: */
 475: function tweet($message) {
 476:     //メッセージをツイートする.
 477:     $option = [
 478:         'text' => $message
 479:     ];
 480: //  $status = $this->connection->post('tweets', $option, TRUE);
 481:     $status = $this->connection->post('tweets', $option, ['jsonPayload' => true]);  //twitteroauth 7.0.0 対応
 482:     $this->webapi = 'https://api.twitter.com/2/tweets';
 483: 
 484:     //処理に成功した.
 485:     if ($this->isSuccess()) {
 486:         $this->responses = $status->data;
 487:         $this->errcode   = NULL;
 488:         $this->errmsg    = '';
 489:         $this->error     = FALSE;
 490:         $res = TRUE;
 491:     //処理に失敗した.
 492:     } else {
 493:         if ($this->isAuthError() == FALSE) {
 494:             $this->errmsg = $status->detail;
 495:             $this->error  = TRUE;
 496:         }
 497:         $res = FALSE;
 498:     }
 499:     return $res;
 500: }

TwitterOAuth クラスを使ってツイートする。

解説:メイン・プログラム

putTwitter.php

 187: //ツイート実行
 188: if ($msg !'') {
 189:     $msg = htmlspecialchars($msg);
 190:     if ($ptw->twitter_strlen($msg<140) {
 191:         $res = $ptw->setting();
 192:         if ($res) {
 193:             $screen_name = (string)$ptw->responses->screen_name;
 194:             $res = $ptw->tweet($msg);
 195:         }
 196:         if ($res == FALSE) {
 197:             $outmsg = '<p style="color:red;">投稿失敗:' . $ptw->errmsg . '</p>';
 198:         } else {
 199:             $id_str = $ptw->responses->id;
 200: //          $url = 'https://twitter.com/' . $screen_name . '/status/' . $id_str;
 201:             $url = 'https://x.com/' . $screen_name . '/status/' . $id_str;
 202:             $outmsg = '<p style="color:blue;">投稿成功:<a href="' . $url . '">' . $url . '</a></p>';
 203:         }
 204:     } else {
 205:         $outmsg = '<p style="text:red;">メッセージを 140 文字以下にしてください.</p>';
 206:     }
 207: }
 208: 

メイン・プログラムは、冒頭でPHP5以上かどうかの判定を行い、クラス "'pahooTwitterAPI.php" を読み込む。

一度に投稿できるツイートは、半角でも全角でも140文字以下なので、入力文字数のチェックをしておく。
ユーザー関数 twitter_strlen は、英数字も日本語も1文字としてカウントするが、URLのみ23文字としてカウントするTwitter仕様である。140文字を超えた場合にはツイートしない。

tweet を実行した後、戻り値を解析し、成功した場合には投稿メッセージへのリンクを表示する。

Twitterへの再登録が必要な場合も

https対応のバージョンアップしたプログラムを、以前のアクセストークンのまま利用しようとしたのだが、Twitter APIがエラーを返してくる。そこで、新しいプログラムとして登録したところ、なぜが正常に動作した。

プログラムのバージョンアップで正常に動作しない場合は、Twitterへ新規登録してみるといいだろう。

質疑応答

【質問】
とっさん
Twitterへの投稿プログラムを使ってみようと思ったのですが、
putTwitter.phpを実行すると、次のファイルがないので動きません
require_once('pahooInputData.php');
このファイルはどこからダウンロードできますか?
【回答】
配布ファイルから漏れており、失礼しました。
"pahooInputData.php" を追加した配布ファイルをアップロードしました。お手数ですが、再ダウンロードをお願いします。
【質問】
とっさん
"pahooInputData.php" を追加した配布ファイルはどこからダウンロードできますか?
【回答】
本ページの上の方にある「ダウンロード」ボタンをクリックして、再ダウンロードをお願いします。

【質問】
よし
TwitterOAuthのバージョンはいくつでしょうか?
現在、7.0.0のようです。

下記、エラーが発生しました。
Fatal error: Uncaught Error: Call to undefined method Abraham\TwitterOAuth\TwitterOAuth::setApiVersion() ~pahooTwitterAPI.php
【回答】
TwitterOAuthのバージョンは 5.0.0 でした。
2024年(令和6年)6月21日に、TwitterOAuth 7.0.0 に対応した "pahooTwitterAPI.php" を同梱した圧縮ファイルを公開しました。お試しください。

参考サイト

(この項おわり)
header