前回の記事でPHPからTwitterOAuthを使ってツイートする方法を紹介しました。
今回はそこからちょっとステップアップして画像付きのツイートを行う方法を紹介します。
目次
前提
前回までの記事でかいた以下を完了させて置く必要があります。
- Twitter APIに登録する
- Twitter APIからAPI Key、API Key Secretを取得する
- TwitterOAuthのインストール
上記3点の方法は下記の記事で説明しているので、そちらを参照してください。
サンプルプログラム
手順としては以下の通りです。
- TwitterOAuthライブラリの読み込み
- APIキーやアクセストークンの取得
※サンプルコードはいずれも定数としていますが、Twitter連携でログインする場合はアクセストークンはDBに保管するなどして、そこから取得する必要があります。 - Twitter接続。
- 画像をアップロードし、画像のIDを取得
- ツイート部分のパラメータ編集
※取得した画像のIDを使用する - ツイート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// ①TwitterOAuthライブラリの読み込み require_once('vendor/autoload.php'); use Abraham\TwitterOAuth\TwitterOAuth; // ②APIキーやアクセストークンの取得 define('consumer_key', 'APIキー'); define('consumer_secret', 'API シークレット'); define('access_token', 'アクセストークン'); define('access_token_secret', 'アクセストークン シークレット'); // ③Twitter接続 $twiConnct = new TwitterOAuth(Consumer_Key, Consumer_Secret, access_token, access_token_secret); // ④画像をアップロードし、画像のIDを取得 $imageId = $twiConnct->upload('media/upload', ['media' => '画像ファイルのパス'); // ⑤ツイート部分のパラメータ編集 $tweet = [ 'status' => ’ツイートの内容', // ツイートの内容(テキスト部分) 'media_ids' => implode(',', [ // 画像の指定 $imageId->media_id_string ]) ]; // ⑥ツイート $res = $twiConnct->post("statuses/update", $tweet) |
順番に見ていきます。
TwitterOAuthライブラリの読み込み
基本であるTwitterOAuthのライブラリを読み込みます。
composerで最新(2020年4月時点)ではサンプルコードのパスで問題ないはずです。
APIキーやアクセストークンの取得
API Key、API Key Secret、Access Token、Access Token Secretを取得します。
サンプルコードでは定数に記述するようにしていますが、Access Token、Access Token Secretはログイン(ツイート)するユーザーによって変わります。
ですので、ログイン機能をTwitterと連携させる場合には、データベース等にユーザー事にAccess Token、Access Token Secretを管理する必要があります。
Twitter接続
これもお決まりの文房ですね。
API Key、API Key Secret、Access Token、Access Token Secretを指定してTwitterOAuthのインスタンスを作成することでTwitterに接続できます。
画像をアップロードし、画像のIDを取得
Twitterに画像付きのツイートをする場合にはまず画像のアップロードをする必要があります。
これは決まり文句でサンプルコードの「画像ファイルのパス」の部分を変更すればOKです。
ちなにここで指定した「画像ファイルのパス」にファイルが存在しない場合はエラーとなりますあが、テキスト部分はそのままツイートされます。
個人的には内部でエラーになってほしくないので、ツイートする内容に画像が含まれるかどうかを事前に判断して、画像をアップロードするかどうか処理を分けたいところです。
ツイート部分のパラメータ編集
これも決まり文句ですね。
複数の画像もアップロードすることができます。
複数アップロードする場合のサンプルコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 |
// ④画像をアップロードし、画像のIDを取得 $imageId1 = $twiConnct->upload('media/upload', ['media' => '画像ファイルのパス'); $imageId2 = $twiConnct->upload('media/upload', ['media' => '画像ファイルのパス'); // ⑤ツイート部分のパラメータ編集 $parameters = [ 'status' => 'ツイートの内容', 'media_ids' => implode(',', [ $imageId1->media_id_string, // この部分をアップロードした画像分記述する $imageId2->media_id_string // この部分をアップロードした画像分記述する ]) ]; |
ツイート
ここも決まり文句になります。
これを記述すると実際にツイートされることになります。
僕のアプリケーション「katwibo」から送信されていますね。
まとめ
いかがだったでしょうか?
テキストのみでツイートする場合に比べると画像のアップロードとパラメーターの指定部分が異なるだけで、大きく変わりません。
異なる部分もほぼ決まり文句なのでさほど難しくはないと思います。
個人的にはパラメータの連想配列の指定がごちゃっとしてるので、そこをなんとかできないかと思ってはいますけど。