新しい記事:OAuth認証でTwitterを利用するWebアプリケーション(PHP PECL/oauthの場合)
OAuth認証が必要なAPIでは、Twitter APIとFacebook APIが有名ですが、ちょっと仕様が違うので、使い方を簡単に紹介しようとすると、記事を分けなければなりません。さらに、JavaとPHPの両方を学べるというお得な本を書いたこともあって、その読者をサポートするために、JavaとPHPの両方で記事を書かなければなりません。都合、以下の4パターンが必要です。
- JavaでFacebook API(未)
- JavaでTwitter API(済)
- PHPでFacebook API(済)
- PHPでTwitter API(この記事)
今回は、「PHPでTwitter API」です。「JavaでFacebook API」はまた別の機会に。
アプリの登録
http://dev.twitter.com/appsでアプリケーションを登録し、Concumer keyとConsumer secretを取得してください。その際、クライアントアプリケーションではなくブラウザウェブアプリケーションとして登録するように注意してください。
OAuthのためのライブラリ
PHPには、標準の「PECL/oauth」や準標準と言える「Pear HTTP_OAuth」、Twitterに特化した「Pear Services_Twitter」がありますが、例によって、PECLはWindowsで使いにくいし、HTTP_OAuthはベータ版、Services_Twitterはアルファ版なので、さっさと見限って「twitteroauth」を使いましょう。
OAuth.phpとtwitteroauth.phpをダウンロードして、ウェブサーバで配信できる場所に置きます。
cURL
XAMPP
PHPでcURLを使うために、php.iniに以下のように記述して、Apacheを再起動します。
extension=php_curl.dll
Ubuntu
次のコマンドを実行してcURLモジュールをインストールしてからApacheを再起動します。
sudo apt-get install php5-curl
お約束ですが、このあたりでもうついて行けないという場合は、拙著『Webアプリケーション構築入門』などを参照してください。以下のPHPプログラミングで必要な知識も本書にまとめてあります。
OAuth認証
以下の3画面で認証することにします(oauth-start.phpとoauth-end.phpは一つのファイルにまとめることもできますが、ここではわかりやすいように二つに分けています)。
- OAuth認証のためのURIを生成し、それにアクセスするためのリンクを表示するoauth-start.php
- アプリケーションを許可するTwitterページ
- Twitterからのコールバックを受信し、access tokenとtoken secretを取得するoauth-end.php
実装
oauth-start.php
OAuth認証の入り口となるoauth-start.jspは以下のようになります。「Consumer key」や「Consumer secret」、コールバックURIの部分は、状況に合わせて書き換えてください。
<?php require_once('twitteroauth.php'); session_start(); $_SESSION['consumer_key'] = Consumer key; $_SESSION['consumer_secret'] = Consumer secret; $callbackUri = 'http://localhost/twitter/oauth-end.php'; $connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret']); $request_token = $connection->getRequestToken($callbackUri); $_SESSION['oauth_token'] = $token = $request_token['oauth_token']; $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; $authUrl = $connection->getAuthorizeURL($token); ?> <!doctype html> <html> <head> <meta charset="UTF-8" /> <title>OAuth Start</title> </head> <body> <p><a href="<?php echo $authUrl; ?>">Twitter OAuth認証開始</a></p> <p><a href="logout.php">logout</a></p> </body> </html>
oauth-end.php
コールバック後の処理を実装するoauth-endは以下のようになります。
<?php require_once('twitteroauth.php'); session_start(); $connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $access_token = $connection->getAccessToken($_GET['oauth_verifier']); unset($_SESSION['oauth_token']); unset($_SESSION['oauth_token_secret']); $_SESSION['access_token'] = $access_token; ?> <!doctype html> <html> <head> <meta charset="UTF-8" /> <title>Twitter OAuth認証完了</title> </head> <body> <pre><?php print_r($access_token); ?></pre> <p>access_tokenをセッションに保存した</p> <p><a href="post.php">送信テスト</a></p> <p><a href="logout.php">logout</a></p> </body> </html>
つぶやく
認証が終わったら、以下のようなコードでつぶやけます。
<?php header('Content-type:text/plain; charset=utf-8'); require_once('twitteroauth.php'); session_start(); $access_token = $_SESSION['access_token']; $connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $access_token['oauth_token'], $access_token['oauth_token_secret']); $message = "テスト at " . time(); $parameters = array('status' => $message); $status = $connection->post('statuses/update', $parameters); if (isset($status->errors)) { //エラーがある $errors = $status->errors; $error = $errors[0]; echo $error->message."\n"; } print_r($status);
ブラウザを再起動すればはじめに戻りますが、次のようなlogout.phpを作っておいてもいいでしょう。
<?php session_start(); session_destroy(); ?> <!doctype html> <html> <head> <title>Logout</title> </head> <body> <p><a href="oauth-start.php">start</a></p> </body> </html>