2013-05-06

Flickr:phpによるOauth認証&javascriptによるアクセス


phpでFlickrのOauth認証を実施後、javascriptにてFlickr apiにアクセスするサンプルプログラムを作成した。

サンプルプログラム


◆FlickrのAPI Key と Secret
以下から取得する。
https://www.flickr.com/services/apps/create/

◆Oauth認証をするphp

FlickrOauth認証 参照


◆作成したサンプルプログラム(index.php)

  1. <?php
  2.  
  3. session_start();
  4. require_once('FlickrOauth.php');
  5.  
  6. define('CONSUMER_KEY', 'XXXXXXXXXX'); // XXXXXXXXXXにkeyを記載する
  7. define('CONSUMER_SECRET', 'YYYYYYYY'); // YYYYYYYYにSecretを記載する
  8. define('CALLBACK_URL', 'http://ZZZZZZZZ/index.php'); // このファイルのアドレスを記載する
  9. if(! isset($_SESSION['test_access_token'])){
  10.  
  11. if(! isset($_SESSION['test_request_token'])){
  12.  
  13. // request token取得
  14. $tw = new FlickrOAuth(CONSUMER_KEY, CONSUMER_SECRET);
  15. $token = $tw->getRequestToken(CALLBACK_URL);
  16. // SESSIONに登録
  17. $_SESSION['test_request_token'] = $token['oauth_token'];
  18. $_SESSION['test_request_token_secret'] = $token['oauth_token_secret'];
  19. // 認証用URL取得してredirect
  20. $authURL = $tw->getAuthorizeURL($_SESSION['test_request_token'],'write');
  21. header("Location: " . $authURL);
  22.  
  23. }else{
  24.  
  25. // access token 取得
  26. $tw = new FlickrOAuth(CONSUMER_KEY, CONSUMER_SECRET,
  27. $_SESSION['test_request_token'], $_SESSION['test_request_token_secret']);
  28. $access_token = $tw->getAccessToken($_REQUEST['oauth_verifier']);
  29.  
  30. // SESSIONに登録
  31. $_SESSION['test_access_token'] = $access_token['oauth_token'];
  32. $_SESSION['test_access_token_secret'] = $access_token['oauth_token_secret'];
  33.  
  34. }
  35.  
  36. }
  37.  
  38. ?>
  39.  
  40. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  41. <html xmlns="http://www.w3.org/1999/xhtml">
  42. <head>
  43. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  44.  
  45. <title>FlickrOauth Test</title>
  46.  
  47. <script type="text/javascript" src="js/sha1.js"></script>
  48. <script type="text/javascript" src="js/oauth.js"></script>
  49. <script type="text/javascript">
  50.  
  51. var oauth_token = "<?php echo $_SESSION['test_access_token']; ?>";
  52. var oauth_token_secret = "<?php echo $_SESSION['test_access_token_secret']; ?>";
  53.  
  54. var consumerKey = "<?php echo CONSUMER_KEY; ?>";
  55. var consumerSecret = "<?php echo CONSUMER_SECRET; ?>";
  56.  
  57. //var agent = new FlickrOAuth(consumerKey, consumerSecret, "write");
  58.  
  59. window.onload = function(){
  60.  
  61. // SignOut.php へのリンクを作成
  62. var html = '<br/><a href="SignOut.php">Sign Out</a>';
  63. document.getElementById("SignOut").innerHTML = html;
  64.  
  65. // SessionDestroy.php へのリンクを作成
  66. var html = '<br/><a href="SessionDestroy.php">セッションを終了する(このドメインへのセッションを破棄します)</a>';
  67. document.getElementById("SessionDestroy").innerHTML = html;
  68.  
  69. // リクエスト
  70. var accessor = {
  71. consumerSecret: consumerSecret,
  72. tokenSecret: oauth_token_secret
  73. };
  74. var message = {
  75. method: "GET", // POSTではIEで動作しない。
  76. action: "http://www.flickr.com/services/rest",
  77. parameters: {
  78. oauth_signature_method: "HMAC-SHA1",
  79. oauth_consumer_key: consumerKey,
  80. oauth_token: oauth_token,
  81. jsoncallback: "callbackfunction",
  82. format: "json",
  83. method: "flickr.test.login"
  84. }
  85. };
  86.  
  87. OAuth.setTimestampAndNonce(message);
  88. OAuth.SignatureMethod.sign(message, accessor);
  89.  
  90. var target = OAuth.addToURL(message.action, message.parameters);
  91.  
  92. var script = document.createElement( 'script' );
  93. script.type = 'text/javascript';
  94. script.src = target;
  95. document.body.appendChild( script );
  96. }
  97.  
  98. function callbackfunction(data,dataType){
  99.  
  100. var html = '<a>ID : ' + data.user.id + '</a><br/>';
  101. html += '<a>USER NAME : '+ data.user.username._content + '</a>';
  102. document.getElementById("test_login").innerHTML = html;
  103.  
  104. }
  105.  
  106.  
  107. </script>
  108.  
  109.  
  110. <style type="text/css">
  111. <!--
  112.  
  113. html, body {
  114. background-color: #CCFFFF;
  115. }
  116.  
  117. // -->
  118. </style>
  119.  
  120.  
  121. </head>
  122.  
  123. <body>
  124. <h1>Flickr Oauth Test</h1><br/>
  125. <div id="test_login"></div>
  126. <div id="SignOut"></div>
  127. <div id="SessionDestroy"></div>
  128.  
  129. </html>
  130.  
  131.  
  132.  



以下のjavascriptファイルを使用する。


    sha1.js - ここからダウンロード
    oauth.js - ここからダウンロード



◆認証を取り消すphp

  1. <?php
  2.  
  3. session_start();
  4.  
  5. // セッション変数を消去する
  6. unset($_SESSION['test_access_token']);
  7. unset($_SESSION['test_access_token_secret']);
  8. unset($_SESSION['test_request_token']);
  9. unset($_SESSION['test_request_token_secret']);
  10.  
  11. ?>
  12.  
  13. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  14. <html xmlns="http://www.w3.org/1999/xhtml">
  15. <head>
  16. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  17.  
  18. <title>FlickrOauth Test</title>
  19.  
  20. <style type="text/css">
  21. <!--
  22.  
  23. html, body {
  24. background-color: #CCFFFF;
  25. }
  26.  
  27. // -->
  28. </style>
  29.  
  30. </head>
  31.  
  32. <body>
  33. <h1>Flickr Oauth Test への認証を取り消しました。</h1><br/>
  34. <div id="FlickrOauthTest"><a href="index.php">Flickr Oauth Test</a></div>
  35. </body>
  36. </html>
  37.  



◆セッションを破棄するphp

  1. <?php
  2.  
  3. session_start();
  4.  
  5. // セッション変数を全て解除する
  6. $_SESSION = array();
  7.  
  8. // セッションクッキーを削除する。
  9. if (isset($_COOKIE[session_name()])) {
  10. setcookie(session_name(), '', time()-42000, '/');
  11. }
  12.  
  13. // セッションを破壊する
  14. session_destroy();
  15.  
  16. ?>
  17.  
  18. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  19. <html xmlns="http://www.w3.org/1999/xhtml">
  20. <head>
  21. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  22.  
  23. <title>FlickrOauth Test</title>
  24.  
  25. <style type="text/css">
  26. <!--
  27.  
  28. html, body {
  29. background-color: #CCFFFF;
  30. }
  31.  
  32. // -->
  33. </style>
  34.  
  35. </head>
  36.  
  37. <body>
  38. <h1>このドメイン(http://s10-4bn.sunnyday.jp/)のセッションを破棄しました。</h1><br/>
  39. <div id="FlickrOauthTest"><a href="index.php">Flickr Oauth Test</a></div>
  40. </body>
  41. </html>
  42.  



◆参考にしたページ




以上