備忘録のため,内容の正当性については責任を持ちません。

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('てすと投稿ー。');

他にも色々できそうなので調べてみよう。

参考ページ

コメント

コメント(1) “PHP + Services_Twitter で Twitter アプリを作成する”

  1. ふじしろ

    参考になりました。
    ありがとうございます。

コメントする




CAPTCHA