Skip to content

Instantly share code, notes, and snippets.

@nojimage
Created November 9, 2009 01:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nojimage/229599 to your computer and use it in GitHub Desktop.
Save nojimage/229599 to your computer and use it in GitHub Desktop.
HTTP_OAuth sample
<?php
// require HTTP_OAuth
require_once('HTTP/OAuth/Consumer.php');
/* Twitterの認証情報を格納するためにセッションを開始 */
session_start();
/* Consumer key from twitter */
$consumer_key = '{ここにConsumer keyを貼り付け}';
/* Consumer Secret from twitter */
$consumer_secret = '{ここにConsumer Secretを貼り付け}';
/* twitterからの Callback url */
$callback_url = 'http://{このスクリプトの設置場所}';
/* Set up placeholder */
$content = '';
/* セッションのクリア */
if ($_REQUEST['test'] === 'clear') {
session_destroy();
session_start();
}
try {
// -- init HTTP_OAuth_Consumer
$oauth = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret);
// ssl通信を可能に
$http_request = new HTTP_Request2();
$http_request->setConfig('ssl_verify_peer', false);
$consumer_request = new HTTP_OAuth_Consumer_Request;
$consumer_request->accept($http_request);
$oauth->accept($consumer_request);
if (!empty($_REQUEST['oauth_token']) && $_SESSION['oauth_state'] === 'start') {
// -- Twitterから認証後に戻ってきた場合 (callback処理)
$_SESSION['oauth_state'] = 'returned';
if (empty($_SESSION['oauth_access_token']) || empty($_SESSION['oauth_access_token_secret'])) {
// -- access_tokenが未取得の場合
/* request tokenをセット */
$oauth->setToken($_SESSION['oauth_request_token']);
$oauth->setTokenSecret($_SESSION['oauth_request_token_secret']);
/* twitterから戻ってきた oauth_verifierをセット */
$oauth_verifier = $_REQUEST['oauth_verifier'];
/* Access token をリクエスト */
$oauth->getAccessToken('https://twitter.com/oauth/access_token', $oauth_verifier);
/* Acces tokenを保存 (実際のアプリケーションではこれをDB等に保存しておきます。) */
$_SESSION['oauth_access_token'] = $oauth->getToken();
$_SESSION['oauth_access_token_secret'] = $oauth->getTokenSecret();
}
}
if (!empty($_SESSION['oauth_access_token']) && !empty($_SESSION['oauth_access_token_secret'])) {
// -- 認証済みの場合
/* Random copy */
$content = 'your account should now be registered with twitter. Check here:<br />';
$content .= '<a href="https://twitter.com/account/connections">https://twitter.com/account/connections</a>';
/* access_tokenをセット */
$oauth->setToken($_SESSION['oauth_access_token']);
$oauth->setTokenSecret($_SESSION['oauth_access_token_secret']);
/* ユーザ情報を取得するリクエストを発行. */
$result = $oauth->sendRequest('https://twitter.com/account/verify_credentials.xml', array(), 'GET');
// その他の例
//$result = $oauth->sendRequest('https://twitter.com/statuses/update.xml', array('status' => 'Test OAuth update. #testoauth'), 'POST');
//$result = $oauth->sendRequest('https://twitter.com/statuses/replies.xml', array(), 'POST');
/* データを取得 */
$content = $result->getBody();
} else {
// -- 初回呼び出し時
/* twitterからrequest_tokenの取得 */
$oauth->getRequestToken('https://twitter.com/oauth/request_token', $callback_url);
/* tokenをセッションに保存 */
$_SESSION['oauth_request_token'] = $oauth->getToken();
$_SESSION['oauth_request_token_secret'] = $oauth->getTokenSecret();
/* ステータスをstartにセット */
$_SESSION['oauth_state'] = "start";
/* authorization URL を取得 */
$request_link = $oauth->getAuthorizeURL('https://twitter.com/oauth/authorize');
/* authorization URLのリンクを作成 */
$content = 'Click on the link to go to twitter to authorize your account.';
$content .= '<br /><a href="'.$request_link.'">'.$request_link.'</a>';
}
} catch (Exception $e) {
$content = $e->getMessage();
}
?>
<html>
<head>
<title>Twitter OAuth in PHP</title>
</head>
<body>
<h2>Welcome to a Twitter OAuth PHP example.</h2>
<p>This site is a basic showcase of Twitters new OAuth authentication method. Everything is saved in sessions. If you want to start over <a href='<?php echo $_SERVER['PHP_SELF']; ?>?test=clear'>clear sessions</a>.</p>
<p><pre><?php print_r($content); ?><pre></p>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment