CentOS 5.4 において,PHP 5.3 + PEAR Services_Twitter により Twitter で OAuth 認証して,利用者の情報を取得する方法をメモしておく。
準備編
PHP と PEAR のバージョンを確認する。たぶんこれより古いとうまくインストールできないので,最新版にしておく必要がある。
# php -v
PHP 5.3.3 (cli) (built: Jul 22 2010 16:41:20)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
# pear list | grep PEAR
PEAR 1.9.1 stable
必要な PEAR パッケージをインストールする。
$ pear upgrade-all
$ pear upgrade --force PEAR
$ pear install channel://pear.php.net/Net_URL2-0.3.1
$ pear install channel://pear.php.net/HTTP_Request2-0.5.2
$ pear install channel://pear.php.net/HTTP_OAuth-0.1.18
$ pear install channel://pear.php.net/Services_Twitter-0.6.3
$ pear upgrade-all
次のページで,Twitter API の CONSUMER_KEY と CONSUMER_SECRET を取得する。
作成編
それでは実際にアプリを作っていく。
まず,設定ファイル (config.inc.php) を作成する。
<?php
define('BASE_DIR', 'http://<このアプリの設置ディレクトリ>');
define('CONSUMER_KEY', '<先ほど取得した CONSUMER_KEY>');
define('CONSUMER_SECRET', '<先ほど取得した CONSUMER_SECRET>');
require_once('Services/Twitter.php');
require_once('HTTP/OAuth/Consumer.php');
session_start();
次に,OAuth 認証を行なうプログラム (oauth.inc.php) を作成する。
<?php
if (empty($_SESSION['AUTH_TOKEN']) || empty($_SESSION['TOKEN_SECRET'])) {
try {
$oauth = new HTTP_OAuth_Consumer(
CONSUMER_KEY,
CONSUMER_SECRET
);
$oauth->getRequestToken(
'http://twitter.com/oauth/request_token',
BASE_DIR.'callback.php'
);
$_SESSION['callback_token'] = $oauth->getToken();
$_SESSION['callback_secret'] = $oauth->getTokenSecret();
$redirect = $oauth->getAuthorizeUrl('https://twitter.com/oauth/authorize');
$_SESSION['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
header('location: '.$redirect);
} catch (Exception $e) {
echo($e->getMessage());
}
exit();
}
try {
$twitter = new Services_Twitter();
$oauth = new HTTP_OAuth_Consumer(
CONSUMER_KEY,
CONSUMER_SECRET,
$_SESSION['AUTH_TOKEN'],
$_SESSION['TOKEN_SECRET']
);
$twitter->setOAuth($oauth);
} catch (Exception $e) {
echo($e->getMessage());
exit();
}
さらに,Twitter で認証が成功したあとのコールバックによる戻り先 (callback.php) を作成する。
<?php
require_once('config.inc.php');
try {
$twitter = new Services_Twitter;
$oauth = new HTTP_OAuth_Consumer(
CONSUMER_KEY,
CONSUMER_SECRET,
$_SESSION['callback_token'],
$_SESSION['callback_secret']
);
$oauth->getAccessToken('http://twitter.com/oauth/access_token', $_GET['oauth_verifier']);
$twitter->setOAuth($oauth);
$_SESSION['AUTH_TOKEN'] = $oauth->getToken();
$_SESSION['TOKEN_SECRET'] = $oauth->getTokenSecret();
} catch (Exception $e) {
echo($e->getMessage());
exit();
}
header('location: '.$_SESSION['REQUEST_URI']);
作成後,再度「Twitterアプリケーション」のページにアクセスし,callback.php の URL を登録する。
そして,メインのプログラム (index.php) を作成する。
<?php
require_once('config.inc.php');
require_once('oauth.inc.php');
/* ここから下にコードを書いていく */
例えば,次のようにすれば,アカウント名 (screen_name) を取得できる。
$info = $twitter->account->verify_credentials();
echo($info->screen_name);
この他の値も取得できるので,
$info = $twitter->account->verify_credentials();
echo('<pre>');
print_r($info);
として確認してみると良い。
つぶやきを投稿するには,次のようにする。
$result = $twitter->statuses->update('てすと投稿ー。');
他にも色々できそうなので調べてみよう。
コメント
参考になりました。
ありがとうございます。