Twitter/OAuth

1月 1, 2003 · Posted in Twitter · Comment 

概要

Twitterに外部アプリケーションから投稿する方法。OAuthを利用する。

まえおき

PHPとPearのHTTP_OAuthを利用してTwitterAPIを利用する。

> pear install Net_URL2
> pear install HTTP_Request2
> pear install HTTP_OAuth

または、チャンネルとバージョン指定で。

>pear install channel://pear.php.net/Net_URL2-0.3.0
>pear install channel://pear.php.net/HTTP_Request2-0.4.1
>pear install channel://pear.php.net/HTTP_OAuth-0.1.4

ちなみに、Windows+xamppの場合は、コマンドプロンプトを立ち上げて

cd c:\xampp\php
pear install 〜
とする。

流れ

アプリケーション新規登録

http://twitter.com/apps/
よりアプリケーションの情報を登録し、Consumer keyとConsumer secretを入手する。
コールバックURLは、実際に利用するコールバックURLと異なってもOKなので、ローカル開発中は適当に。

アプリケーション登録画面

キー取得

アクセストークンの取得

認証用URLを発行し、アクセストークンを取得する。

01.requestToken.php

<?php
session_start();
require_once "HTTP/OAuth/Consumer.php";

$consumerKey = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$consumerSecret = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$callbackUrl = "http://localhost/twitter/02.callback.php";

// 利用準備
$oAuth = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
$httpRequest = new HTTP_Request2();
$httpRequest->setConfig("ssl_verify_peer", false);
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($httpRequest);
$oAuth->accept($consumerRequest);

// リクエストトークンを取得する
$oAuth->getRequestToken("https://twitter.com/oauth/request_token", $callbackUrl);

// 取得したリクエストトークン(Secret)を、セッションに保存(コールバック先で利用するため)
$_SESSION["oauth_request_token_secret"] = $oAuth->getTokenSecret();

// 認証用URLを発行する
$authorizeUrl = $oAuth->getAuthorizeURL("https://twitter.com/oauth/authorize");

// リダイレクト
header("Location: " . $authorizeUrl);
die();
?>

先のコードで、コールバック先に02.callback.phpを指定しているので、利用者により認証画面を通過すると、http://localhost/twitter/02.callback.phpが呼び出される

02.callback.php

<?php
session_start();
require_once "HTTP/OAuth/Consumer.php";

$consumerKey = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$consumerSecret = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";

// 利用準備
$oAuth = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
$httpRequest = new HTTP_Request2();
$httpRequest->setConfig("ssl_verify_peer", false);
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($httpRequest);
$oAuth->accept($consumerRequest);

// リクエストトークンの設定
$oAuthToken = $_GET{"oauth_token"};
$oAuth->setToken($oAuthToken);
// セッションからリクエストトークン(Secret)を取得する
$oAuth->setTokenSecret($_SESSION["oauth_request_token_secret"]);

// TwitterからGETで渡されたoauth_verifierパラメータ
$oAuthVerifier = $_REQUEST["oauth_verifier"];

// アクセストークンをリクエスト
$oAuth->getAccessToken("https://twitter.com/oauth/access_token", $oAuthVerifier);

// 結果(アプリケーション+ユーザで一意なので、DBやファイルなどに保存しておく)
print $oAuth->getToken();
print "<br>";
print $oAuth->getTokenSecret();
?>

ポスト

03.post.php

<?php
session_start();
require_once "HTTP/OAuth/Consumer.php";

$consumerKey = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$consumerSecret = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";

// 利用準備
$oAuth = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
$httpRequest = new HTTP_Request2();
$httpRequest->setConfig("ssl_verify_peer", false);
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($httpRequest);
$oAuth->accept($consumerRequest);

// アクセストークンを設定
$oAuth->setToken("[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]");
$oAuth->setTokenSecret("[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]");

// 投稿
$result = $oAuth->sendRequest("https://twitter.com/statuses/update.xml", array("status"=>"Test on OAut00h API2"), "POST");

// 結果(ちゃんとパースしましょう)
print_r($result);
?>