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でセッションを完全に破棄する方法
以上