PHPでTwitter APIを使ってみる
プロジェクトとアプリの作成
APIキーを取得するためにプロジェクトとアプリを作成します。まずはプロジェクト名。 プロジェクトの理由ですかね。APIを使うだけなので「Exploring the API」にします。 プロジェクトの説明。 プロジェクトにアプリを追加。 アプリができればAPIキーが取得できます。 アプリが使うAPIの機能に合わせて権限を設定します。 認証を利用する場合に設定します。
プログラムの作成
APIを使うプログラムをPHPで書いていきます。こちらの記事を参考にしています。
ライブラリのインストール
TwitterOAuthをインストールします。>composer require abraham/twitteroauth:^1.2.0
/**
* Set Curl options.
*
* @return array
*/
private function curlOptions(): array
{
$bundlePath = CaBundle::getSystemCaRootBundlePath();
$options = [
// CURLOPT_VERBOSE => true,
CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout,
CURLOPT_HEADER => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => $this->timeout,
CURLOPT_USERAGENT => $this->userAgent,
$this->curlCaOpt($bundlePath) => $bundlePath,
];
プログラムの作成
Twiterログイン認証画面にリダイレクト、ログイン完了後のコールバック、ログイン後の処理という形でプログラムを用意します。<?php
session_start();
require_once 'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
const CONSUMER_KEY = '*******************'; // API key
const CONSUMER_SECRET = '*****************************************'; // API key secret
const OAUTH_CALLBACK = 'http://localhost/callback.php';
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$request_token = $connection->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]);
// callback.php で利用する
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
$_SESSION['consumer_key'] = CONSUMER_KEY;
$_SESSION['consumer_secret'] = CONSUMER_SECRET;
// twitter.com上の認証画面のURLを取得してリダイレクト
$url = $connection->url('oauth/authenticate', ['oauth_token' => $request_token['oauth_token']]);
header('location: '. $url);
<?php
session_start();
require_once 'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
// Twitterから返されたOAuthトークンの検証
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
die('OAuth token invalid');
}
// OAuthトークンも用いてTwitterOAuthをインスタンス化
$connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
// アクセストークンの取得
$_SESSION['access_token'] = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_REQUEST['oauth_verifier']]);
session_regenerate_id();
header('location: /app.php');
<?php
session_start();
require_once 'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
// アクセストークンを取得
$access_token = $_SESSION['access_token'];
$connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $access_token['oauth_token'], $access_token['oauth_token_secret']);
//ユーザー情報取得
$user = $connection->get('account/verify_credentials');
if(!empty($_POST)){
if(isset($_POST['tweet'])){
// ツイートする
$tweet = $_POST['tweet'];
$connection->post('statuses/update', ['status' => $tweet]);
}elseif(isset($_POST['dm'])){
// DMする
$message = $_POST['dm'];
$result = $connection->post('direct_messages/events/new', [
'event' => [
'type' => 'message_create',
'message_create' => [
'target' => [
'recipient_id' => $user->id,
],
'message_data' => [
'text' => $message,
]
]
]
], true);
}
}
// タイムラインを取得
$timeline = $connection->get('statuses/user_timeline', ['count' => 3]);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<title>Twitter App</title>
</head>
<body>
<div class="container mt-4 mb-4">
<h4>ユーザー</h4>
<div class="row">
<div class="col-sm-8">
<img src="<?=$user->profile_image_url_https?>">
<span><?=$user->name?>(@<?=$user->screen_name?>)</span>
</div>
</div>
</div>
<div class="container mb-4">
<h4>最近のツイート</h4>
<table class="table table-striped">
<thead>
<tr>
<th>日時</th>
<th>ツイート内容</th>
</tr>
</thead>
<tbody>
<?php foreach($timeline as $tweet):?>
<tr>
<td><?=date('Y/m/d H:i:s', strtotime($tweet->created_at))?></td>
<td><?=$tweet->text?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
</div>
<div class="container mb-4">
<h4>ツイート</h4>
<form action="/app.php" method="post">
<textarea rows="3" cols="100" name="tweet"></textarea>
<input type="submit" value="ツイートする"/>
</form>
</div>
<div class="container">
<h4>DM</h4>
<form action="/app.php" method="post">
<textarea rows="3" cols="100" name="dm"></textarea>
<input type="submit" value="DM送信"/>
</form>
</div>
</body>
</html>
php -S localhost:80 -t .
」でビルトインサーバーを起動して「http://localhost/login.php」にアクセスして実行します。APIを使ってログイン、アカウント情報の取得、ツイートの取得・送信、DMが送信できます。
ディスカッション
コメント一覧
まだ、コメントがありません