2011/12/23

【PHP】phpでmixiGraphAPIを使ってmixiにつぶやきを投稿するサンプル【mixi】

phpでmixiGraphAPIを使ってつぶやきを投稿するサンプルを作ってみました。

※mixiGraphAPIを使うにはOAuth認証を使うのでこちらより必要なモノを取得してください

必要なもの
・Consumer Key ・Consumer Secret 前回の記事を参考にしてください。 前回の記事でサービスURLとリダレクトURLをそれぞれ下記のように設定しました。 ・サービスURL http://example.com/index.php ・リダイレクトURL http://example.com/callback.php こちらの話からしていきたいと思います。 まず、サービスURLとは自分で作成したサービスへの動線になります。 今回はサービスURLにアクセスした際に自動でmixiに認証しに行くように実装します。 次にリダイレクトURLですが、こちらはmixiの認証からのレスポンスを受け取るURLになります。 リダイレクトURLの方にアクセスユーザのOAuth認証用のパラメータを保存したりする処理を 実装しておけば大丈夫だと思います。 今回はサンプルということでリダイレクトURLの方でつぶやく機能もそのまま実装しました。 index.php
<?php
// 認証用パラメータ
$param = array(
    'client_id'     => '取得したConsumer Key',
    'response_type' => 'code',
    'scope'         => 'w_voice',
    'display'       => 'pc',
    'state'         => null,
);
// 認証先URL
$auth_url = 'https://mixi.jp/connect_authorize.pl';
// 認証用パラメータをクエリストリングに
$request_param = http_build_query($param, null, '&');

// リクエストURLを作成
$request_url = $auth_url . '?' . $request_param;

// 認証
header('Location: ' . $request_url);
exit;
callback.php
<?php
session_start();

$access_token = null;

// Authレスポンスの取得
$code = $_GET['code'];

if ($code != '')
{
    // アクセストークンの取得
    $access_token = getAccessToken($code);
}

// つぶやきを投稿する
if (!is_null($access_token))
{
    // 投稿内容
    $text = 'つぶやきテスト';
    $res = postVoice($text, $access_token);

    // 結果をdump
    echo "<pre>";
    var_dump($res);
    echo "</pre>";
}



/**
 * アクセストークンの取得
 * @param  string $code         Authレスポンス
 * @return string $access_token アクセストークン
 */
function getAccessToken($code)
{
    // アクセストークン取得用パラメータ
    $param = array(
        'grant_type'    => 'authorization_code',
        'client_id'     => '取得したConsumer Key',
        'client_secret' => '取得したConsumer Secret',
        'code'          => $code,
        'redirect_uri'  => 'http://example.com/callback.php',
    );

    // cURLでアクセストークンを取得する
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_URL, 'https://secure.mixi-platform.com/2/token');
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));

    $res = curl_exec($ch);
    curl_close($ch);

    // 返却値がjson形式なのでデコードする
    $res = json_decode($res, true);

    $access_token = $res['access_token'];

    return $access_token;
}

/**
 * つぶやきを投稿する
 * @param  string      $text         つぶやく内容
 * @param  string      $access_token アクセストークン
 * @return assoc_array $res          APIからのレスポンス
 */
function postVoice($text, $access_token)
{
    // つぶやき投稿用URL
    $voice_url = 'http://api.mixi-platform.com/2/voice/statuses';

    // つぶやき投稿用パラメータ
    $param  = array(
        'status' => $text,
    );

    // cURLでつぶやきを投稿
    $ch = curl_init();

    // リクエストヘッダを作成
    $header = array(
        'Authorization: OAuth ' . $access_token
    );

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_URL, $voice_url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param, null, '&'));
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    $res = curl_exec($ch);
    curl_close($ch);

    // 返却値がjson形式なのでデコードする
    $res = json_decode($res, true);

    return $res;
}
index.php(サービスURL側) 解説
まず、認証用パラメータですが、上記の5つをGETパラメータとして渡す必要があります。 ※stateパラメータは必須ではない。 注意が必要なのはscopeパラメータで、そのサービスを利用する上でそのユーザのデータに アクセスする必要がある項目になります。 今回はつぶやきの投稿を行うので「w_voice」を指定しています。 ※複数指定する場合はスペース区切りで指定する。
callback.php(リダイレクトURL側) 解説
index.phpが認証された場合にリダイレクトされてくるURLです。 こちらで認証用文字列を受け取ります。 mixiからリダイレクトURLに下記のようにGETパラメータを付加された状態でリダイレクトされてきます。
http://example.com/callback.php?code=認証用文字列
※GETパラメータ「code」はアクセストークンを取得する際に必要になります。 このGETパラメータを使いアクセストークンを取得します。 その次に取得したアクセストークンを使いつぶやき用のURLにcURLを使いPOSTメソッドでつぶやき本文を パラメータとして送信します。 ※ mixiGraphAPIからの返却値はすべてjson文字列になります。 ※ ですので、php側でこねくりまわしたりする際にはパースして配列に戻してやる 必要があります。 解説は以上になります。 不明な点がありましたらコメントにてどうぞ 今mixiGraphAPIのライブラリを作成しているのでそのうち公開できたらなーとか思ってます。 終わり 関連記事: 【mixi】mixiGraph APIを使うための準備 【PHP】mixiGraphAPIのOAuth認証用ライブラリを作成しました。【mixi】

0 件のコメント:

コメントを投稿