phpでFlickrのOauth認証を実施後、javascriptにてFlickr apiにアクセスするサンプルプログラムを作成した。
サンプルプログラム
◆FlickrのAPI Key と Secret
以下から取得する。
https://www.flickr.com/services/apps/create/
◆Oauth認証をするphp
FlickrOauth認証 参照
◆作成したサンプルプログラム(index.php)
<?php
session_start();
require_once('FlickrOauth.php');
define('CONSUMER_KEY', 'XXXXXXXXXX'); // XXXXXXXXXXにkeyを記載する
define('CONSUMER_SECRET', 'YYYYYYYY'); // YYYYYYYYにSecretを記載する
define('CALLBACK_URL', 'http://ZZZZZZZZ/index.php'); // このファイルのアドレスを記載する
if(! isset($_SESSION['test_access_token'])){
if(! isset($_SESSION['test_request_token'])){
// request token取得
$tw = new FlickrOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$token = $tw->getRequestToken(CALLBACK_URL);
// SESSIONに登録
$_SESSION['test_request_token'] = $token['oauth_token'];
$_SESSION['test_request_token_secret'] = $token['oauth_token_secret'];
// 認証用URL取得してredirect
$authURL = $tw->getAuthorizeURL($_SESSION['test_request_token'],'write');
header("Location: " . $authURL);
}else{
// access token 取得
$tw = new FlickrOAuth(CONSUMER_KEY, CONSUMER_SECRET,
$_SESSION['test_request_token'], $_SESSION['test_request_token_secret']);
$access_token = $tw->getAccessToken($_REQUEST['oauth_verifier']);
// SESSIONに登録
$_SESSION['test_access_token'] = $access_token['oauth_token'];
$_SESSION['test_access_token_secret'] = $access_token['oauth_token_secret'];
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>FlickrOauth Test</title>
<script type="text/javascript" src="js/sha1.js"></script>
<script type="text/javascript" src="js/oauth.js"></script>
<script type="text/javascript">
var oauth_token = "<?php echo $_SESSION['test_access_token']; ?>";
var oauth_token_secret = "<?php echo $_SESSION['test_access_token_secret']; ?>";
var consumerKey = "<?php echo CONSUMER_KEY; ?>";
var consumerSecret = "<?php echo CONSUMER_SECRET; ?>";
//var agent = new FlickrOAuth(consumerKey, consumerSecret, "write");
window.onload = function(){
// SignOut.php へのリンクを作成
var html = '<br/><a href="SignOut.php">Sign Out</a>';
document.getElementById("SignOut").innerHTML = html;
// SessionDestroy.php へのリンクを作成
var html = '<br/><a href="SessionDestroy.php">セッションを終了する(このドメインへのセッションを破棄します)</a>';
document.getElementById("SessionDestroy").innerHTML = html;
// リクエスト
var accessor = {
consumerSecret: consumerSecret,
tokenSecret: oauth_token_secret
};
var message = {
method: "GET", // POSTではIEで動作しない。
action: "http://www.flickr.com/services/rest",
parameters: {
oauth_signature_method: "HMAC-SHA1",
oauth_consumer_key: consumerKey,
oauth_token: oauth_token,
jsoncallback: "callbackfunction",
format: "json",
method: "flickr.test.login"
}
};
OAuth.setTimestampAndNonce(message);
OAuth.SignatureMethod.sign(message, accessor);
var target = OAuth.addToURL(message.action, message.parameters);
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = target;
document.body.appendChild( script );
}
function callbackfunction(data,dataType){
var html = '<a>ID : ' + data.user.id + '</a><br/>';
html += '<a>USER NAME : '+ data.user.username._content + '</a>';
document.getElementById("test_login").innerHTML = html;
}
</script>
<style type="text/css">
<!--
html, body {
background-color: #CCFFFF;
}
// -->
</style>
</head>
<body>
<h1>Flickr Oauth Test</h1><br/>
<div id="test_login"></div>
<div id="SignOut"></div>
<div id="SessionDestroy"></div>
</html>
以下のjavascriptファイルを使用する。
sha1.js - ここからダウンロード
oauth.js - ここからダウンロード
◆認証を取り消すphp
<?php
session_start();
// セッション変数を消去する
unset($_SESSION['test_access_token']);
unset($_SESSION['test_access_token_secret']);
unset($_SESSION['test_request_token']);
unset($_SESSION['test_request_token_secret']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>FlickrOauth Test</title>
<style type="text/css">
<!--
html, body {
background-color: #CCFFFF;
}
// -->
</style>
</head>
<body>
<h1>Flickr Oauth Test への認証を取り消しました。</h1><br/>
<div id="FlickrOauthTest"><a href="index.php">Flickr Oauth Test</a></div>
</body>
</html>
◆セッションを破棄するphp
<?php
session_start();
// セッション変数を全て解除する
$_SESSION = array();
// セッションクッキーを削除する。
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// セッションを破壊する
session_destroy();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>FlickrOauth Test</title>
<style type="text/css">
<!--
html, body {
background-color: #CCFFFF;
}
// -->
</style>
</head>
<body>
<h1>このドメイン(http://s10-4bn.sunnyday.jp/)のセッションを破棄しました。</h1><br/>
<div id="FlickrOauthTest"><a href="index.php">Flickr Oauth Test</a></div>
</body>
</html>
◆参考にしたページ
- TwitterクライアントのOAuth対応(Javascript編)
- PHPでセッションを完全に破棄する方法
以上