流れ:
1,Twitterのサイト上で、作成するサービスの利用を登録する。
2,登録が終わったら、今回作成するサービス固有の「consumer_key」「consumer_secret」を取得する。
3,いよいよロジックを組む。
ロジックの流れは下記:
3-1,
上記の「consumer_key」「consumer_secret」を用いて「oauth_token」「oauth_token_secret」を生成する
3-2,
上記「oauth_token」「oauth_token_secret」を用いて、Twitterのサイトで認証を行う。認証後に戻ってくるcallbackのURLを指定すること
3-3,
callbackで指定したURLで、「consumer_key」「consumer_secret」「oauth_token」「oauth_token_secret」を用いて"認証済みアクセストークン"を作成。以降これを用いることでTwitterへの投稿などが出来る。
3-4,
"認証済みアクセストークン"を保存しておく。今回はシリアライズしてデータベースに保存してみた。
ソースコードはこんな感じ。登録と、CallBackURLと、2つ示す。
登録
// twitter用ライブラリファイルの読み込み
include_once "../lib/twitteroauth.php";
// twitter関連の設定
$consumer_key = "r------------------------------g";
$consumer_secret = "C---------------------------------------------------------------o";
// twitter認証画面へ
$to = new TwitterOAuth($consumer_key, $consumer_secret);
$r_tokenset = $to->getRequestToken("http://localhost/------------/twitter_callback.php");
$_SESSION["rt"] = $r_tokenset["oauth_token"];
$_SESSION["rts"] = $r_tokenset["oauth_token_secret"];
$url = $to->getAuthorizeURL($_SESSION["rt"]);
header("Location: " . $url);CallBackURL
// twitter用ライブラリファイルの読み込み
require_once("../lib/twitteroauth.php");
// twitter関連の設定
$consumer_key = "r--------------------g";
$consumer_secret = "C-------------------------------------------o";
// アクセストークンの取得
$to = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION["rt"], $_SESSION["rts"]);
$_SESSION["rts"];
$a_tokenset = $to->getAccessToken();
// 取得したアクセストークンをDBに登録
$serialized_tokenset = serialize($a_tokenset);注意点は下記:
★ライブラリはtwitteroauth.phpを利用
何種類かライブラリがあったが、twitteroauthを使うことにした。日本語での解説ブログが多い点も助かった。
★認証作業を次回以降不要にするためにアクセストークンをシリアライズしてDBに保存
色々なブログには単に「データベースに保存」と書いてある程度だった。どうしようか迷ったがとりあえずシリアライズして突っ込んでみた。最利用するときはアンシリアライズして利用。イメージとしては下記のようなコード。
2度目以降利用時
// アクセストークンの取得 $sql = "SELECT twitter_access_token FROM hoge_table WHERE id = 123" ; $ret = mysql_query($sql); $row = mysql_fetch_assoc($ret); $a_tokenset = unserialize($row["twitter_access_token"]); $to = new TwitterOAuth($consumer_key, $consumer_secret, $a_tokenset["oauth_token"], $a_tokenset["oauth_token_secret"]);
2度目以降の利用時には、getAccessToken()で返される連想配列が["oauth_token"]、["oauth_token_secret"]、["screen_name"]、["user_id"]の4つから成ることを知っていると簡単。そのうち前者2つを使って、登録時と同様にnew TwitterOAuthすればOK。この流れと実現方法が体系的に説明されているサイトをなかなか見つけられずに苦労した。
★Twitter上での認証状態とサービス上での認証状態の連携
未解決課題なのだが…ユーザはTwitterとサービスの連携認証をいつでもTwitterサイト上から取り消せる。でもTwitter上から連携を解除されてしまうとサービス側のDBはそれに気づけず不整合になる。サービス側から必要に応じてTwitterの認証状態をチェックに行く機構が必要。
Web上の色々な情報を参考に一応動作するものが組めたが、当初は不案内な用語も多く戸惑うことが多かった。ブログを見ているとライブラリを使わずにOAuth認証部分をガリガリ自作している人はわずかのようだった。暗号化方式を指定してうんぬん、と話がややこしくなるため、今回はライブラリを使ってさくっと作ってみた。
参考になるサイト様は下記:
- カテゴリ:


