読者です 読者をやめる 読者になる 読者になる

tech::hexagram

personal note for technical issue.

今日のパーティーを占ったーの技術的仕様について[post_test.php]

長らく更新が途絶え申し訳ございませんでしたm(__)m
就活・研究,そして先日の地震でてんやわんやで更新のタイミングを逃していました.
被災地の一日も早い復興を祈っております.

さて,今日は先日のTwitterPHPによるページについて,1ヶ月近く間があいてしまいましたが解説を行いたいと思います.

まず,この記事はpost_test.phpについて.最初に表示されるページですね.

ソースコードはこんな感じ.とりあえず大事なところだけピックアップしてみます.

<?php

session_start();

require_once ("OAuth/twitteroauth.php");
require_once ("OAuth/OAuth.php");

$consumer_key        = '***';
$consumer_secret = '***';

$consumer = new TwitterOAuth($consumer_key, $consumer_secret);

(中略)

//twitter
if($_SESSION['access_token']==NULL && $_SESSION['access_token_secret']==NULL){
  //get request token
  $callback = 'http://km602.usamimi.info/callback.php';
  $r_tokenset=$consumer->getRequestToken('http://km602.usamimi.info/callback.php');
  $_SESSION['request_token'] = $r_tokenset['oauth_token'];
  $_SESSION['request_token_secret'] = $r_tokenset['oauth_token_secret'];
  $auth_url = $consumer->getAuthorizeUrl($_SESSION['request_token']);

  //main contents
  print "<center><a href=\"{$auth_url}\">ここを押して占います!</a></center>";

  } else {
  print "<center><a href=sample.php>ここを押して占います!(1度認証した人用)</a></center>";
  }
?>

<html>
html本体がここ
</html>

さて,ここから細部に分けて解説を行っていきます.

session_start();

これでセッションを維持して,consumer_key,consumer_secret等の情報を,ページ間で維持します.

require_once("OAuth/twitteroauth.php");
require_once("OAuth/OAuth.php");

twitteroauth.phpとOAuth.phpについては,abrahamのライブラリを利用します.
http://github.com/abraham/twitteroauth/downloads

$consumer = new TwitterOAuth($consumer_key, $consumer_secret);

abrahamのライブラリに準じたものです.

if($_SESSION['access_token']==NULL && $_SESSION['access_token_secret']==NULL){
  //get request token
  $callback = 'http://km602.usamimi.info/callback.php';
  $r_tokenset=$consumer->getRequestToken('http://km602.usamimi.info/callback.php');
  $_SESSION['request_token'] = $r_tokenset['oauth_token'];
  $_SESSION['request_token_secret'] = $r_tokenset['oauth_token_secret'];
  $auth_url = $consumer->getAuthorizeUrl($_SESSION['request_token']);

  //main contents
  print "<center><a href=\"{$auth_url}\">ここを押して占います!</a></center>";

  } else {
  print "<center><a href=sample.php>ここを押して占います!(1度認証した人用)</a></center>";
  }

OAuth認証を初めて行う場合

遷移ページに飛ばし,認証後access_tokenとaccess_token_secretを取得.

すでに一度認証を行っている場合

else以下の処理で遷移ページを除きsample_phpへ飛ばす.

後半はよいとして,前半について解説したいと思います.

  //get request token
  $callback = 'http://km602.usamimi.info/callback.php';
  $r_tokenset=$consumer->getRequestToken('http://km602.usamimi.info/callback.php');
  $_SESSION['request_token'] = $r_tokenset['oauth_token'];
  $_SESSION['request_token_secret'] = $r_tokenset['oauth_token_secret'];
  $auth_url = $consumer->getAuthorizeUrl($_SESSION['request_token']);

$callbackでコールバックのURLを記述をします.これはTwitterのアプリ登録の際に登録したコールバックURLを指定します.これにより,ライブラリを利用してoauth_tokenと,oauth_token_secretが取得できます.
このoauth_tokenを利用して

  $auth_url = $consumer->getAuthorizeUrl($_SESSION['request_token']);

により,認証URLを生成します.生成したURLをa hrefでHTMLに吐いてユーザに押させる,という仕組みです.