2009年9月14日

OpenID/OAuth

PHPでYahoo!のOAuth対応APIにアクセスしてみよう!

  • このエントリーをはてなブックマークに追加

こんにちは、IDプラットフォーム技術の近藤です。

前回の記事ではYahoo! JAPAN のOAuthが採用しているSession Extensionについて簡単に紹介をしました。
そこでSession Extentionの一連のフローを開発者が意識することなく、OAuthに対応したYahoo! JAPANのAPIを使ってWebアプリを実装できるようにYahoo! JAPANデベロッパーネットワーク上にPHP SDKを公開しました。

今回はSDKを利用してマイ・オークション表示(ウォッチリスト・開催中のオークション)APIにアクセスする簡単なサンプルコードを作っていきたいと思います。

はじめに,Yahoo!デベロッパーネットワークからアプリケーション登録をしてConsumer Key及びSecretを発行します。そしてOAuthサンプルコードからOAuth SDKをダウンロードして、libディレクトリをドメイン認証済みのサーバのドキュメントルート以下に配置します。

開発者が新規に作成する必要があるファイルは以下の2つです

  • OpenWatchListApi.inc(マイ・オークションAPIにアクセスを行うクラス)
  • sample.php(メインのコード)

まずは、SDKに含まれる抽象クラスYahooAbstractApiを継承してAPIアクセスクラスOpenWatchListApiを作成してみましょう。

  • OpenWatchListApi.inc
    <?php
    require('lib/YahooAbstractApi.php');
    
    /**
     * ウォッチリストを取得するAPIのクラス
     */
    class OpenWatchListApi extends YahooAbstractApi {
    
        /**
        *  1.APIのリクエストURL
        */
        const REQUEST_URL = 'http://auctions.yahooapis.jp/AuctionWebService/V1/openWatchList';
    
        /**
        *  2.コンストラクタ
        */
        public function __construct(YahooSession $session) {
            parent::__construct($session);
        }
    
        /**
        * 3.APIレスポンスを取得する
        */
        public function getResponse( $parameters ) {
            $this->httpGet( self::REQUEST_URL, $parameters );
            return $this->getResponseBody();
        }
    }
    ?>
    
  1. APIのリクエストURLを記述します。
  2. ユーザのセッションデータを受け取るコンストラクタを記述します。
  3. 抽象メソッドgetResponseをオーバーライドし、リクエストパラメータを配列で受け取ってGETでAPIアクセスする機能を実装します。

次にサンプルコードの処理についてみてみましょう。

  • sample.php
    // 1.Include OAuth library.
    require('lib/YahooOAuth.inc');
    
    // 2.Consumer Key & Secret
    $consumerKey = '開発者のコンシューマーキー';
    $consumerSecret = '開発者のコンシューマーシークレット';
    
    // 3.callback URL
    $callback = sprintf('http://%s%s',$_SERVER['SERVER_NAME'],$_SERVER['SCRIPT_NAME']);
    
    // 4.sessionを取得
    $session = YahooSession::requireSession($consumerKey, $consumerSecret, $callback);
    
    ・・・・・・・・・・・
    
  1. ダウンロードしたSDKをインクルード可能な場所に配置して、lib/YahooOAuth.incをインクルードします。
  2. 発行したOAuth Consumer Key及びConsumer Secretを指定します。
  3. End Userが同意後の戻り先URLを指定します。アプリケーション登録時に認証済みのドメインと同一であれば、開発者が任意にパスを設定することができます。
  4. APIアクセスクラスに渡すEnd Userのセッションデータを取得します。セッションデータにはSession HandleやAccess Tokenが含まれます。Session Handleが期限切れや無効になった場合にはEnd Userに再度同意を促すページにリダイレクトさせる処理も行っています。

次に,先ほど作成したOpenWatchListApi.incをインクルードしてセッションデータをAPIアクセスクラスのオブジェクトに渡し、getResponseメソッドを使ってAPIからのレスポンスを取得します。

  • sample.php(つづき)
    ・・・・・・・・・・・
    
    // APIレスポンスを取得する
    require('OpenWatchListApi.inc');
    $api = new OpenWatchListApi($session);
    $parameters = array(
        'page' => 1,
    );
    $response = $api->getResponse($parameters);
    
    // 結果表示
    header('Content-Type: text/html; charset=utf-8');
    ?>
    <html>
    <head>
        <title>マイオークション・APIサンプルコード</title>
    </head>
    <body>
        <h1>API サンプルレスポンス</h1>
        <pre><?=htmlentities( $response )?></pre>
    </body>
    </html>
    

最後に、作成したOpenWatchListApi.incとsample.phpをドキュメントルート以下に配置してブラウザからアクセスして動作確認してみましょう。うまくいっていれば、Yahoo! JAPANのログイン画面またはパスワード再確認画面へリダイレクトされるはずです。

ユーザが自分のYIDとパスワードを入力して、同意画面でユーザのマイ・オークションを参照、更新する機能を提供をConsumer(ここではこのサンプルWebアプリ)に提供することに同意すると、Callbackで指定したURLに戻り。セッションデータを取得してAPIアクセスを行います。画面にAPIアクセス結果のレスポンスが出てれば成功です\(^o^)/

一度同意すればユーザの同意(Session Handle)が有効な期間に限り、ユーザの再同意を得ることなくConsumerはAPIアクセス可能になります。ユーザの同意のフローからやり直したい場合はセッションデータを管理しているCookie(yjsdk_at)を削除してください。

以上、OAuth SDKの使い方を説明させていただきました。
まだマイ・オークションAPIを試されていない方はぜひこの機会にさわっていただければと思います。



Yahoo!デベロッパーネットワーク - OAuth
Yahoo!デベロッパーネットワーク - オークションAPI
Yahoo!デベロッパーネットワークは こちら
APIをご利用前にアプリケーションID の取得を忘れずにお願いします。
登録はこちら

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加