0

mixiアプリモバイルのOAuth

mixiアプリモバイルのAPIへのアクセスはOAuth認証が必要です。
twitterやlastFM等が採用してるOAuthと少し違う2-legged OAuthというやつです。
簡単にいうとエンドユーザーによる承認のプロセスが省略されたバージョン。(たぶん)

ユーザー情報やマイミクの情報を取得したい場合はこの認証を突破して取得する必要があります。
以下phpのサンプルです。
require_once 'OAuth.php';
 
/**
* oAuthで認証後mixiAPIをたたく
*
* @param string $user ユーザー
* @param string $feed エンドポイント以降のURL
* @return object APIで取得したデータ 失敗時:false;
*/
function getMixiAPI($user, $option_feed)
{
define('CONFIG_API_ENDPOINT', 'http://api.mixi-platform.com/os/0.8');
 
$CONSUMER_KEY = 'xxxxxxxxxxxxxx';
$CONSUMER_SECRET = 'xxxxxxxxxxxxxxx';
$consumer = new OAuthConsumer($CONSUMER_KEY, $CONSUMER_SECRET, NULL);
 
$feed = CONFIG_API_ENDPOINT . $option_feed;
  // マイミク一覧取得の場合はここを変える
$params = array('xoauth_requestor_id' => $user, 'fields' => 'addresses,birthday,gender');
$request = OAuthRequest::from_consumer_and_token($consumer, NULL, 'GET', $feed, $params);
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, NULL);
$url = $feed . '?' . implode_assoc('=', '&', $params);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_ENCODING , "gzip");
 
$auth_header = $request->to_header();
if ($auth_header) {
curl_setopt($curl, CURLOPT_HTTPHEADER, array($auth_header));
}
 
$response = curl_exec($curl);
if (!$response) {
$response = curl_error($curl);
}
curl_close($curl);
 
$response = json_decode($response);
 
if (is_object($response)) {
return $response;
}
else {
return false;
}
}
 
function implode_assoc($inner_glue, $outer_glue, $array)
{
$output = array();
foreach($array as $key => $item) {
$output[] = $key . $inner_glue . urlencode($item);
}
return implode($outer_glue, $output);
}

$response = getMixiAPI($_REQUEST['opensocial_owner_id'], '/people/@me/@self');
利用には、OAuth.phpが必要です。
上記の例は単純にアクセスしたユーザーの情報を取得します。

mixiアプリは過度にAPIへのアクセスがあったり5秒以内にレスポンスを返せないことが多々あると
アプリ一覧から消されて新規ユーザーが取り込めない状態になります。
色々対策をとって負荷を軽減しレスポンスを速くすることに努めなければなりません。
APIのアクセスももちろんその対象です。
対策というほどでもないけど下記の3点くらいは守るべき。

1、必要な情報だけとる。
addresses,birthday,gender等は必要があれば取得する
$params = array('xoauth_requestor_id' => $user, 'fields' => 'addresses,birthday,gender');

2、圧縮して通信する。
curl_setopt($curl, CURLOPT_ENCODING , "gzip");

3、一度取得したら数時間はSAP側でキャッシュしておく。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です