2010年02月21日

HTTP_OAuthを利用してBrightKiteでOAuth認証を行う

iPhoneを買ってから友人の薦めでBrightKiteにハマってます。もうガラケーいらないってくらい。

しかし、仕事上携帯電話は必要でiPhoneは通話しづらいしBrightKite中に通話があると「ブチッ#」と来るのでAUも持ってます。

携帯には電話しか求めなくなってたんだけど、ふとしたタイミングで故障して修理より買った方が安いという事で買い換えました。
買い換えるとiPhoneより高性能なカメラ機能を使ってBrightKiteをやりたいのだけどモバイル版サイトがやたら使いづらい。ガラケーから。

でAPI使って自分用に作れないかと挑戦し始めてはや3ヶ月。
まずoAuthがわからず、PECLのさくらインターネットへの導入にハマり、今度はHttpRequest2にハマりやっと動くようになりました。


HTTP_OAuthで参考にしたのは以下のサイト。
http://php-tips.com/php/2009/11/http_oauth%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6twitter%E3%81%AEoauth%E8%AA%8D%E8%A8%BC%E3%82%92%E8%A1%8C%E3%81%86
下のサンプルも成功したらトラックバックしようと思ってまんまなのだけどトラバ受け付けて無かった。
相変わらず詰めが甘い orz


ちなみにBrightKiteAPI本家はコチラ
http://groups.google.com/group/brightkite-api

HTTP_OAuthのドキュメントはコチラ
http://pear.php.net/package/HTTP_OAuth/docs/latest/HTTP_OAuth/HTTP_OAuth_Consumer.html

という事でサンプルは続きを読むから

<?php
// require HTTP_OAuth
require_once('HTTP/OAuth/Consumer.php');

/* BrightKiteの認証情報を格納するためにセッションを開始 */
session_start();

if(isset($_REQUEST["test"])){
$test = $_REQUEST["test"];
}else{
$test = null;
}


/* Consumer key from twitter */
$consumer_key = '****************';
/* Consumer Secret from twitter */
$consumer_secret = '********************************';
/* twitterからの Callback url */
$callback_url = 'http://*****/****/sample.php';

/* Set up placeholder */
$content = '';

/* セッションのクリア */
if ($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') {
// -- BrightKiteから認証後に戻ってきた場合 (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']);

/* BrightKiteから戻ってきた oauth_verifierをセット */
$oauth_verifier = $_REQUEST['oauth_verifier'];

/* Access token をリクエスト */
$oauth->getAccessToken('http://brightkite.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'])) {
// -- 認証済みの場合

/* access_tokenをセット */
$oauth->setToken($_SESSION['oauth_access_token']);
$oauth->setTokenSecret($_SESSION['oauth_access_token_secret']);

/* ユーザ情報を取得するリクエストを発行. */
$result = $oauth->sendRequest('http://brightkite.com/me.xml', array(), 'GET');

/* データを取得 */
$contentStr = $result->getBody();
//$content &= $result;

$buff = simplexml_load_string($contentStr);

$creator = $buff->xpath("/person/last_post/note/creator");
$place = $buff->xpath("/person/place");
$contentBody = $buff->xpath("/person/last_post/note/body");

$content = sprintf("<img src='%s' >%s(%s)<BR>",$creator[0]->small_avatar_url,$creator[0]->login,$creator[0]->fullname);
$content .= sprintf("place:%s<BR>",$place[0]->name);
$content .= sprintf("last-post:%s<BR>",$contentBody[0]);
} else {

// -- 初回呼び出し時
/* BrightKiteからrequest_tokenの取得 */
$oauth->getRequestToken('http://brightkite.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('http://brightkite.com/oauth/authorize');

/* authorization URLのリンクを作成 */
$content = 'Click on the link to go to BrightKite to authorize your account.';
$content .= '<br /><a href="'.$request_link.'">'.$request_link.'</a>';
}

} catch (Exception $e) {
$content = $e->getMessage();
}
?>

<html>
<head>
<title>BrightKite OAuth in PHP</title>
</head>
<body>
<h2>Welcome to a BrightKite OAuth PHP example.</h2>
<p>This site is a basic showcase of BKers 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 echo$content; ?><pre></p>

</body>
</html>
posted by onsoku at 21:09| Comment(2) | TrackBack(0) | 日記
この記事へのコメント
将来あなたが結婚できるか、その相手はどんな人なのかがこの結婚チェッカーが診断いたします!簡単チェックでバシっと診断!結婚を諦める前にこの結婚診断を試してみませんか?
Posted by 結婚 at 2011年09月03日 05:53
トリーバーチ ショルダー 買取 ロレックス http://www.forshoppingaccentjp.biz/ [url=http://www.forshoppingaccentjp.biz/]買取 ロレックス[/url]
Posted by 買取 ロレックス at 2013年08月10日 16:51
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/35474998

この記事へのトラックバック