はてなのサービスでAPIを利用するためにOAuthでの認証をPHPで行う方法

PHPでOAuthで認証してはてなのAPIを使う方法です。このエントリではaccess tokenとaccess secert tokenを取得するところまでを記載します。PHPで実装した例があまり無かったので、今回書いてみました。

基本的なことは以下のエントリにまとまっています(感謝!)。

http://d.hatena.ne.jp/sandai/20101219/p1

上記エントリを参考に、とりあえずコード先行でhatena_api_oauth.phpを書いてみると、以下のようになります。

<?php
include 'HTTP/OAuth/Consumer.php';
session_start();

// Consumer keyを設定する
$consumer_key = 'あなたのOAuth Consumer Key';
$consumer_secret = 'あなたのOAuth Consumer Secret';

// リクエストのためのオブジェクトを生成する
$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret);
$http_request = new HTTP_Request2();
$http_request->setConfig('ssl_verify_peer', false);
$consumer_request = new HTTP_OAuth_Consumer_Request;
$consumer_request->accept($http_request);
$consumer->accept($consumer_request);

// OAuthの部分
if (empty($_GET['oauth_verifier'])) {
	// このスクリプトを置いた場所を指定する
	$callback = 'http://置いた場所/hatena_api_oauth.php';
	// スコープの内容を設定する
	$additional = array('scope' => 'read_public,write_public,read_private,write_private');
	$consumer->getRequestToken('https://www.hatena.com/oauth/initiate', $callback, $additional);
	$_SESSION['request_token'] = $consumer->getToken();
	$_SESSION['request_token_secret'] = $consumer->getTokenSecret();
	$auth_url = $consumer->getAuthorizeUrl('https://www.hatena.ne.jp/oauth/authorize');
	header("Location: $auth_url");
} else {
	$consumer->setToken($_SESSION['request_token']);
	$consumer->setTokenSecret($_SESSION['request_token_secret']);
	$consumer->getAccessToken('https://www.hatena.com/oauth/token', $_GET['oauth_verifier']);
	print "access_token : " . $consumer->getToken() . "<br/>";
	print "access_token_secret : " . $consumer->getTokenSecret();
}

注意する点は以下のとおりです。

PEARの下準備

HTTP_OAuthがインストールされている必要があります。詳しくはこちらを。PEAR自体のインストールについては、さくらのレンタルサーバの場合ですが、こちらを。

OAuth Consumer KeyとOAuth Consumer Secretを取得する

まずアプリケーションを登録し、OAuth Consumer KeyとOAuth Consumer Secretを取得します。以下のページから登録できます。
アプリケーションの登録

承認を求める操作(scope)の登録

上記のアプリケーション登録ページでscopeの設定も行います。自分だけが使うならば全部にチェックを入れてもいいですが、他の人が使う場合は必要最低限の権限を選択した方がいいでしょう。

ソース内の$additionalでscopeを設定する

上記のサンプルソースでは全権限を認めていますが、必要に応じて設定した権限のものに書き換えましょう。なお、カンマの後に半角スペースを入れるとエラーになりますので、見栄えは置いといて「read_public,write_public,read_private,write_private」というようにつなげましょう。

ソース内の$consumer_keyと$consumer_secretを設定する

これは簡単でしょう。OAuth Consumer KeyとOAuth Consumer Secretを代入してください。

ソース内の$callbackの設定

このスクリプトを置いたURLを$callbackに代入してください。応用的なことをするのであれば$callbackに別のページのURLを入れるといいと思います。

さて、上記の注意点を踏まえて、hatena_api_oauth.phpを実行し、はてな側で認証が完了すると、下記のようにaccess_tokenとaccess_token_secretが表示されます(架空の値です)。

access_token : FoEh8x97B/KLPA==
access_token_secret : c6fiOLGefciGB/ZWltjOvOCjnos=

一度この値を取得すれば、再認証が行われないかぎり、上記の値を使用して認証ができます。HTTP_OAuth_Consumerクラスのオブジェクトを作るときに、第3引数と第4引数にそれぞれaccess_token、access_token_secretを代入すれば、そのオブジェクトを操作することではてなのAPIが使えるようになります。オブジェクト生成の部分だけを抜き出すと、以下のようになります。

$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret, ここにaccess_token, ここにaccess_token_secret);

上記オブジェクトを用いて具体的にどのようにはてなのAPIを叩くかについては別エントリで書きたいと思います。

Powered by はてなブログ