PHPでツイートの埋め込み用HTMLを取得

(1/1)
PHPでツイートの埋め込み用HTMLを取得
今回は、PHPで「Twitter API」を利用し、ホームページやブログにツイートを埋め込むためのHTMLを取得するプログラムをつくる。
イーロン・マスク氏に買収されたTwitterは多くのAPIの使用制限が厳格化されたが、今回使うAPIは逆に、認証不要で利用できるようになった。

(2024年6月21日)TwitterOAuth 7.0.0 対応
(2024年5月18日)ドメイン変更 twitter.com → x.com に対応
(2023年6月17日)Twitter API v2対応

目次

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

PHPでツイートの埋め込み用HTMLを取得
「メッセージ」に送信したいテキストを入力し、「画像(ローカル)」に送信したい画像ファイルを選択し、「画像(URL)」に送信したい画像ファイルのURLを入力する。画像は、ローカルとURLを合わせて最大4個まで指定できる。それ以上は入力しても無視される。
「ツイート」ボタンを押すと、ツイートし、結果メッセージが表示される。

サンプル・プログラム

圧縮ファイルの内容
oembedTwitter.phpサンプル・プログラム本体
pahooTwitterAPI.phpTwitter APIを利用するクラス pahooTwitterAPI。
使い方は「PHPでTwitterに投稿(ツイート)する」などを参照。include_path が通ったディレクトリに配置すること。
oembedTwitter.php 更新履歴
バージョン 更新日 内容
2.0.0 2023/07/17 Twitter API v2対応
1.2 2022/01/10 PHP8対応,リファラ・チェック改良
1.1 2018/12/30 JavaScriptのコピー機能を pahooClipboard に変更
1.0 2017/04/22
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対応
OAuth認証 および Twitter API へのアクセスには、TwitterOAuth を利用する。導入方法は公式サイトにあるように composer を使うことを推奨している。

準備:pahooTwitterAPI クラス

  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" と同じフォルダへコピーすること。

  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 のコンストラクタでインスタンス化しておく。

  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:GET statuses/oembed

対象ツイートを、ホームページやブログで表示するための埋め込み用HTMLを取得するには、「Twitter API:oEmbed API」を用いる。
Twitter API (GET;認証不要)
URL
https://publish.twitter.com/oembed

入力パラメータ
フィールド名 要否 内  容
url 必須 対象ツイートのURL
maxwidth 任意 フレームの最大横幅ピクセル値で指定する。pxは不要。180〜1200の間で指定可能。デフォルトは300。
maxheight 任意 フレームの最大高さピクセル値で指定する。pxは不要。200以上を指定する。デフォルトは400。
limit 任意 表示するアイテム数を1から20の間で指定する。デフォルトは6。。
lang 任意 表示言語。デフォルトはes(英語)。日本語はja。
theme 任意 darkを指定するとダークモードで表示する。
応答データ(json) url 対象ツイートのURL html 取り出したHTML width フレームの幅 height フレームの高さ version バージョン

解説:埋め込み用HTMLを取得

1054: /**
1055:  * ツイートの埋め込み用HTMLを取得する.
1056:  * Tweetet API v2 を使用する.
1057:  * @param   string $url    ツイートURL
1058:  * @param   int    $width  フレームの最大横幅(ピクセル)
1059:  * @param   bool   $script JavaScriptを追加するか否か
1060:  * @return  string HTML/FALSE:取得失敗
1061: */
1062: function oembed($url, $width, $script) {
1063:     //リクエストURL(認証不要)
1064:     $this->webapi = 'https://publish.twitter.com/oembed';
1065:     $request = $this->webapi . '?lang=ja&url=' . urlencode($url. '&maxwidth=' . $width . '&omit_script=' . ($script ? '1' : '0');
1066:     $json = file_get_contents($request, 'r');
1067:     $res = FALSE;
1068:     if ($json !FALSE) {
1069:         $items = json_decode($json);
1070:         $res = $items->html;
1071:     }
1072:     return $res;
1073: }

oEmbed API はGETでパラメータを渡し、JSON形式でデータを受け取る。

参考サイト

(この項おわり)
header