Twitter APIを使いPHPで簡単に画像付きツイートをする方法

ただのシェアボタンではなく画像付きでツイートを投稿したい時ありますよね。

ユーザーに画像付きでツイートして欲しかった時に少し調べたので、今回はPHPでTwitter APIを叩いて画像付きツイートを投稿する方法を説明していきます。

ツイート投稿に必要なもの

Twitter APIでツイートを投稿するには、以下のものが必要になります。

  • Consumer Key (API Key)
  • Consumer Secret (API Secret)
  • Access Token
  • Access Token Secret

これらはどれもユニークなもので、Consumer Keyはアプリケーションを識別するためのIDのようなもので、Secretはその名の通り絶対に公開してはいけません。これらはTwitter Appsから新規登録することで取得できます。

Twitter Appsでは、”Your Access Token” のところで自分のAccess TokenとAccess Token Secretも取得できるのですが、今回はユーザーに認証してもらうことで取得します。

以上のことより、今回はユーザーのアクセストークンを取得することが一先ずの目標となります

 

TwitterOAuth

twitterはユーザー認証にOAuth認証を使っているのですが、これを楽に実装するためにTwitterOAuthと言うライブラリを使用します。OAuthとは、認証を行うことで信頼関係の下でセキュアにサービスを利用したりするものなのですが、詳しいことはこういった記事を見てもらえればと思います。「一番わかりやすいOAuthの説明」

Githubがあるので、ローカル環境に落としておいてください。

 

実際のコード

実装するコードは以下のようになります。

config.php

// 各種キーを設定
$CONSUMER_KEY =  "************************";
$CONSUMER_SECRET = "**************************";

config.phpにはConsumer KeyとConsumer Secretを保管しておくことにします。

auth.php

session_start();
// ライブラリの読み込み
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
// 各種キーの読み込み
require_once "config.php";
 
// Callback URL
define('Callback', 'http://***********/callback.php');
 
// インスタンス作成
$connection = new TwitterOAuth($CONSUMER_KEY, $CONSUMER_SECRET);
// リクエストトークンを取得
$request_token = $connection->oauth("oauth/request_token", array("oauth_callback" => Callback));
 
// コールバックでも利用するためセッションに保存
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
 
// 認証画面へリダイレクト
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
header('Location: ' . $url);

auth.phpはユーザーを認証画面(上のような画面)に飛ばす部分で、TwitterOAuthのインスタンスを作成し、認証画面へリダイレクトさせます。

 

リクエストトークンは認証の通信に使う合言葉のようなもので、callback.phpでも使うのでセッションに保存しておきます。

 

callback.php

session_start();
// ライブラリの読み込み
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
// 各種キーの読み込み
require_once "config.php";
// インスタンス作成
$connection = new TwitterOAuth($CONSUMER_KEY, $CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
// アクセストークン取得
$access_token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_GET['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token']));
//取得したアクセストークンでユーザ情報を取得
$user_connection = new TwitterOAuth($CONSUMER_KEY, $CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
// 画像をアップロード
$media = $user_connection->upload('media/upload', ['media' => './image.jpg']);
// ツイートの内容を設定
$params = [
  'status' => 'test #test',
  'media_ids' => implode(',', [$media->media_id_string])
];
// ツイートする
$result = $user_connection->post('statuses/update', $params);
header('Location: index.html');
exit();

callback.phpは、ユーザーが認証後に帰ってくるページで、サンプルだとindex.htmlと言うページへリダイレクトさせています。

 

ここでサンプルを作る時に気をつけなければならないことはlocalhostで動かす時です。

callback URLをhttp://localhost:8888…のように設定すると、バリデーションで拒否されてしまうので、例えばMAMPなどでcallback URLを指定するときはhttp://127.0.0.1:8888…のように指定する必要があります。

 

アクセストークンを取得したら、いよいよ画像付きツイートの投稿です。

ここでは、APIのmedia/uploadで画像をアップロードし、statuses/updateで投稿します。

statusはツイート内容のことで、media_idsは画像idなのですが、ここにはmedia_id_stringと言う文字列になっている画像idを格納します。

これで無事にツイートできるはずです。お疲れ様でした!

サンプルコードはGithubにあげておきます