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

Yahoo! JAPAN のTechBlogで紹介されてるphpのOAuth SDKが、9/27時点で48もブクマされているので、使ってみます。

■ 取得

$ wget "http://developer.yahoo.co.jp/sample/download/oauth/sample1"
$ unzip sample1
Archive:  sample1
  inflating: yoauth_php_sdk/lib/CookieSessionStore.php
  inflating: yoauth_php_sdk/lib/NoCookieSessionStore.php
  inflating: yoauth_php_sdk/lib/OAuth.php
  inflating: yoauth_php_sdk/lib/OAuthClient.php
  inflating: yoauth_php_sdk/lib/YahooAbstractAPI.php
  inflating: yoauth_php_sdk/lib/YahooAuthentication.php
  inflating: yoauth_php_sdk/lib/YahooException.php
  inflating: yoauth_php_sdk/lib/YahooHeaderParser.php
  inflating: yoauth_php_sdk/lib/YahooLogger.php
  inflating: yoauth_php_sdk/lib/YahooOAuth.inc
  inflating: yoauth_php_sdk/lib/YahooSession.php
  inflating: yoauth_php_sdk/lib/YahooSessionStore.php
  inflating: yoauth_php_sdk/lib/YahooUtil.php
  inflating: yoauth_php_sdk/LICENSE.txt
  inflating: yoauth_php_sdk/README.txt
$ cd yoauth_php_sdk

■ 必要なファイルを作成

$ vim OpenWatchListApi.inc

PHPでYahoo!のOAuth対応APIにアクセスしてみよう! - Yahoo! JAPAN Tech Blogにあるとおり作ります。
ここでtypo発見。。。
lib/YahooAbstractApi.phpをrequireするように書かれていますが、実際のファイルはlib/YahooAbstractAPI.phpだったりします。

<?php  
//require('lib/YahooAbstractApi.php'); これ間違い
require('lib/YahooAbstractAPI.php'); //変更 
$ vim sample.php 

ここも、PHPでYahoo!のOAuth対応APIにアクセスしてみよう! - Yahoo! JAPAN Tech Blogにあるとおり作ります。
PHPのインクルードパスうんぬんを気にしなくていいように、こんな記述をしました。

<?php

// 0. phpのインクルードパスをごにょごにょするコードを追記
$path_extra = dirname(__FILE__);
$path = ini_get('include_path');
$path = $path_extra . PATH_SEPARATOR . $path;
ini_set('include_path', $path);

// 1.Include OAuth library.  
require('lib/YahooOAuth.inc');  
  
// 2.Consumer Key & Secret  
..........

これはOpenIDPHPライブラリで書いてあったので、ちょっとしたPHPのサンプル動かす時に参考にしてます。
あと、htmlentitiesだとやたらと文字化けするような気がするので、特殊文字だけ変換するhtmlspecialcharsにします。
あと、個人的にtextareaのほうが見やすいので、、、(ry

PHP: htmlentities - Manual
PHP: htmlspecialchars - Manual

    <pre><?=htmlentities( $response )?></pre><textarea cols="100" rows="30"><?=htmlspecialchars( $response )?></textarea>

で、動きました。
http://r-weblife.sakura.ne.jp/libraries/yoauth_php_sdk/sample.php

当たり前ですが、
Yahoo!オークションでウォッチリストに追加しておかないと!!!

■ おまけ : GUIDを使いたい!

Yahoo! OAuthでは、OAuthのフローの「3.Access Tokenの取得」のレスポンスに記載されている通り、Yahoo! JAPANで認証状態のユーザーを識別するxoauth_yahoo_guidという値をレスポンスパラメータに含むことで、Consumer側でユーザの変化に気付くことができるようになります。OAuth Coreはシングルサインオンのしくみではないですが、Consumer上のユーザとYahoo! Japan上のユーザー識別子を紐付けることで、よりユーザ管理がしやすくなるのではないのでしょうか。

Yahoo! JAPANがOAuthのService Providerになりました! - Yahoo! JAPAN Tech Blog

ということで、このSDKを使った際にxoauth_yahoo_guidで受け取った値をユーザー管理に使うための方法を確認しておきます。

  • YahooSessionクラスのprivate変数$guidに格納される
  • getGuid()という関数で引っ張れる
<html>  
<head>  
    <title>GUID確認・サンプルコード</title>  
</head>  
<body>  
    <h1>OAuthにより認可されたユーザーのGUID</h1>  
    <pre><?php print $session->getGuid(); ?></pre>
</body>  
</html>

http://r-weblife.sakura.ne.jp/libraries/yoauth_php_sdk/sample_guid.php

■ コード置き場

追記 : ファイル名は修正されたようです。