2014年4月7日月曜日

PHP:OAuth 関数群で Twitter 認証 その3

前回は Twitter から未認証リクエストトークンを取得するところまでやりました。
今回はユーザの許可を得る部分をやります。



OAuth では ID や パスワードを使った認証部分を Web サービスに任せたまま、
ユーザデータを外部から使用することができます。
Twitter の場合だとユーザ情報を取得したりツイートしたりすることができます。
そのため、必ずユーザへどのようにデータを使用するかを説明したうえで、
ユーザデータを使用する許可を得なければなりません。



Twitter の場合は上のようにお馴染みの画面で許可を得ることができます。
未認証リクエストトークンを GET パラメータとして付加して、
Twitter の認証ページヘリダイレクトすればよいです。

// リクエストトークンの取得
$tokens = $oauth->getRequestToken('https://api.twitter.com/oauth/request_token');

// Twitter 認証ページヘリダイレクト
http_redirect('https://api.twitter.com/oauth/authorize', array('oauth_token' => $tokens['oauth_token']));

// リダイレクトは以下でもOK
header('Location: https://api.twitter.com/oauth/authorize?oauth_token=' . $tokens['oauth_token']);


リダイレクトには http_redirect() を使用していますが、header() でもよいです。
これによって上の画像のように認証ページヘジャンプします。

認証が完了すると Twitter へ登録したコールバック URL へ戻ってきます。
コールバックされた時に GET パラメータへ設定されている oauth_token が、
認証済みのリクエストトークンなので、コールバック先の PHP で取得します。
ユーザが許可しなかった場合には danied パラメータが付加されるので
こちらもチェックしておきます。

// ツイッターへのログイン失敗
if(isset($_GET['denied'])) {
    echo '許可がおりませんでした';
} else {
    $token = $_GET['oauth_token'];
}

次回へ続きます。

2014年4月6日日曜日

PHP:OAuth 関数群で Twitter 認証 その2

前回に引き続き PHP の OAuth モジュールで Twitter API を使用する方法です。

Twitter API 使用までの流れを再確認しておきます。


まず最初に API key と API secret を渡して、
未認証リクエストトークンをもらいましょう。

$oauth = new OAuth($config['twitter_api_key'], $config['twitter_api_secret']);
$tokens = $oauth->getRequestToken('https://api.twitter.com/oauth/request_token');
echo 'リクエストトークンは:' . $tokens['oauth_token'] . 'です';

OAuth クラスのコンストラクタに API キーと API シークレットを渡して、
OAuth オブジェクトを作成します。

OAuth クラスにはリクエストトークンをもらうための関数として
getRequestToken() が定義されているのでこれを使用しましょう。
リクエストトークンを受け取るための URL は Twitter Developers で公開されています。

リクエストトークンは getRequestToken() が返してくれる連想配列内に、
'oauth_token' というキーで格納されています。

続きます。

2014年4月5日土曜日

PHP:OAuth 関数群で Twitter 認証 その1

PHP から Twitter API を使用する場合、いくつかの専用ライブラリが公開されています。
今回はそれらを使用せず、PECL 上で公開されている OAuth 拡張モジュールを使用してみます。OAuth 拡張モジュールは OAuth コンシューマ側のみではなくプロバイダ側も書くことができます。今回はコンシューマとして Twitter へアクセスします。

まずは Twitter Developers からアプリの API key と API secret をメモしておきましょう。


config.php などを作って PHP から参照できるようにしておきます。
<?php
/**
 * config.php
 */
$config = array();
$config['twitter_api_key'] = '*********************';  // Twitter のコンシューマキー
$config['twitter_api_secret'] = '********************************';  // Twitter のコンシューマシークレット
?>

Tiwtter で使用されている OAuth1.0a の流れを確認しておきましょう。
(現在アプリ単位での認証は OAuth2.0 が使われるようです)


まず最初に、Twitter から発行された API key と API secret を使って Twitter からリクエストトークンを取得します。事前に Twitter へアプリを登録しておけば特に何もせずに発行されます。

続いて取得したリクエストトークンを付加して Twitter の認証ページヘリダイレクトします。「このアプリがあなたのデータへアクセスすることを許可しますか?」というおなじみの画面です。ここでユーザが許可することによって、認証済みのリクエストトークンを付加した状態でアプリへリダイレクトされます。

認証済みのリクエストトークンが手に入ったら API を使用するためのアクエストークンを取得します。これは認証済みのリクエストトークンと引き換えに入手することができます。

アクセストークンが手に入ったら Twitter API を使って、ユーザのデータを取得したり操作することができるようになります。

具体的なコーディングは次回へ続きます。

2014年4月4日金曜日

Xcode:Windows 用のテキストファイルを作成

Mac と Windows では改行コードが異なるため、Mac のテキストエディタで作成したファイルを Windows のメモ帳で開いたりすると、改行されずに横に長い文になってしまいます。

Mac は LF
Windows は CR+LF

Mac から Windows へ単純なテキストファイルを送る場合は、文字コードだけではなく改行コードも変更しておいたほうが良いです。

ほとんどのエディタでは改行コードの変換が可能ですが、今回は Xcode を使った場合です。

Xcode でファイルを開いた状態で  option + command + 0 を押してユーティリティを表示します。



Text Setting 欄の Text Encoding で文字コードを、 Line Ending で改行コードを指定できます。ファイルを Windows へ送る場合は、文字コードを Shift JIS、改行コードを CRLF へ変更すれば問題ありません。

2014年4月3日木曜日

jQuery:ページ表示後に追加された要素へのイベントバインド

jQuery でイベントをバインドするときに以下のように書いていたとする。
$('.target_class').on('click', function() {
    alert('target_class がクリックされました');
});

この場合、以下のように新しくページヘ追加された要素は反応しない。
$('body').append($('<button class="target_class">押してね</button>'));

ページに新しく追加された要素も含めてイベントをバインドしたいときは、
以下のように doument へバインドする。
$(document).on('click', '.target_class', function() {
    alert('target_class がクリックされました');
})


2014年4月2日水曜日

ChatWork:新着メッセージの通知

仕事で ChatWork を使用する場合があるのですが、未読メッセージのメール通知が1時間毎にしか行ってくれないため、素早く返事をすることができませんでした。ブラウザで ChatWork のページを開きっぱなしにしておくと通知してくれる機能があったため、現在は常にブラウザで開きっぱなしで作業しています。

まず、画面右上の自分のアイコンをクリックして「動作設定」を選択します。



通知設定タブで

- デスクトップ通知を有効にする
- メッセージ内容をデスクトップ通知に表示する
- 新しいメッセージが届いたらサウンドを鳴らす

を ON にします。



これでメッセージが来た時に音声が鳴って、画面上に通知が表示されるようになります。常に開きっぱなしにしなければならないので少々不便ですが、ChatWork を使用する場合は設定しておくべきかと思います。

2014年4月1日火曜日

PHP:公式サイトが回る

エイプリルフールのネタで PHP の公式サイトが回っています。
http://www.php.net

邪魔ですw